正文
在 Visual Studio 2019 的 MFC 项目中,Debug 和 Release 的输出路径可以通过项目属性或直接编辑 .vcxproj 文件来修改。下面是几种常用方式。
一、通过 IDE 图形界面修改(推荐)
1. 打开项目属性
右键项目 → 属性。
2. 修改输出目录(EXE/DLL 生成位置)
依次展开:配置属性 → 常规 → 输出目录
Debug 配置: $(SolutionDir)bin\Debug\
Release 配置: $(SolutionDir)bin\Release\
右上角的 配置 下拉框可以切换
Debug/Release,也可以选择 所有配置 统一修改。 平台 下拉框切换Win32/x64。
3. 修改中间目录(.obj/.pch 等临时文件位置)
同一页面下的 中间目录:
Debug 配置: $(SolutionDir)obj\Debug\
Release 配置: $(SolutionDir)obj\Release\
4. 修改目标文件名(可选)
在 配置属性 → 链接器 → 常规 → 输出文件 中:
$(OutDir)$(TargetName)$(TargetExt)
默认就是跟随 OutDir,一般不用改。
5. 修改目标文件名本身(如加后缀区分)
配置属性 → 常规 → 目标名称:
Debug: $(ProjectName)d → AoTopDoneListd.exe
Release: $(ProjectName) → AoTopDoneList.exe
二、推荐的目录结构
常见做法是把输出统一放到解决方案根目录下的 bin 与 obj:
解决方案根目录\
├── AoTopDoneList\
│ ├── AoTopDoneList.vcxproj
│ ├── AoTopDoneListDlg.cpp
│ └── ...
├── bin\
│ ├── Debug\
│ │ └── AoTopDoneList.exe
│ └── Release\
│ └── AoTopDoneList.exe
├── obj\
│ ├── Debug\
│ └── Release\
└── AoTopDoneList.sln
对应的设置:
| 配置 | 输出目录 | 中间目录 |
|---|---|---|
| Debug | Win32 | $(SolutionDir)bin\Debug\ |
$(SolutionDir)obj\Debug\ |
| Debug | x64 | $(SolutionDir)bin\x64\Debug\ |
$(SolutionDir)obj\x64\Debug\ |
| Release | Win32 | $(SolutionDir)bin\Release\ |
$(SolutionDir)obj\Release\ |
| Release | x64 | $(SolutionDir)bin\x64\Release\ |
$(SolutionDir)obj\x64\Release\ |
三、常用宏含义
| 宏 | 含义 |
|---|---|
$(SolutionDir) |
解决方案所在目录(含结尾 \) |
$(ProjectDir) |
项目所在目录 |
$(ProjectName) |
项目名(不含扩展名) |
$(TargetName) |
目标文件名(不含扩展名) |
$(TargetExt) |
目标扩展名(.exe) |
$(Configuration) |
当前配置名(Debug / Release) |
$(Platform) |
当前平台(Win32 / x64) |
$(OutDir) |
输出目录(即上面设置的“输出目录”) |
$(IntDir) |
中间目录 |
使用宏可以让一份设置自动适配 Debug/Release、Win32/x64,无需逐个配置手改。
四、直接编辑 .vcxproj 文件
如果有多配置要改,手工编辑 .vcxproj 反而更快。
- 右键项目 → 卸载项目。
- 右键项目 → 编辑 AoTopDoneList.vcxproj。
- 找到每个
PropertyGroup(它带有Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"等条件),修改里面的OutDir和IntDir:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)bin\Debug\</OutDir>
<IntDir>$(SolutionDir)obj\Debug\</IntDir>
<TargetName>$(ProjectName)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)bin\Release\</OutDir>
<IntDir>$(SolutionDir)obj\Release\</IntDir>
<TargetName>$(ProjectName)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)bin\x64\Debug\</OutDir>
<IntDir>$(SolutionDir)obj\x64\Debug\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)bin\x64\Release\</OutDir>
<IntDir>$(SolutionDir)obj\x64\Release\</IntDir>
</PropertyGroup>
- 保存,右键项目 → 重新加载项目。
五、注意与 Debug/Release 相关的设置
修改路径后,有些地方会依赖旧的路径,需要同步检查:
1. 调试工作目录
配置属性 → 调试 → 工作目录:
$(OutDir)
如果你把 WebView2 的 WebView2Loader.dll 或本地 HTML 放在 EXE 旁边,调试时的工作目录必须指向 EXE 所在目录,否则程序运行时找不到资源。
2. 生成后事件里的路径
之前在 生成后事件 中写的命令,需要使用宏而不是硬编码:
xcopy /y /d "$(TargetDir)runtimes\win-x64\native\WebView2Loader.dll" "$(TargetDir)"
RD /S /Q "$(TargetDir)runtimes\"
$(TargetDir) 会自动跟随 $(OutDir) 变化,不用改。切忌写成 ..\Release\ 这类硬编码路径,否则改了输出目录就会失效。
3. 附加包含目录 / 附加库目录
若你手工指定过 packages\...\build\native\include,路径通常相对项目文件,不受输出目录影响,无需修改。
4. 静态库依赖项目
如果解决方案里有多个项目,其中某个项目引用主项目的输出,请检查:
- 项目依赖项 是否正确。
- 项目引用 的 链接库依赖项 / 输出文件 是否使用了
$(OutDir)宏而不是硬编码路径。
5. 版本控制忽略
修改后记得把新的 bin\、obj\ 目录加到 .gitignore 里,避免把编译产物提交到仓库:
bin/
obj/
*.user
*.aps
六、快速验证
改完后:
- 生成 → 清理解决方案。
- 手动删除旧的
Debug\、Release\目录(避免混淆)。 - 生成 → 重新生成解决方案。
- 到新的
bin\Debug\和bin\Release\目录确认 EXE 已生成,且WebView2Loader.dll也在旁边(如采用动态链接)。
一句话总结
配置属性 → 常规 → 输出目录 / 中间目录,配合
$(SolutionDir)、$(Configuration)等宏,一份设置即可让 Debug/Release、Win32/x64 自动分目录,同时别忘了检查 调试工作目录 和 生成后事件 是否跟随新路径。
| 要改的内容 | 修改位置 |
|---|---|
| EXE 输出位置 | 常规 → 输出目录 |
| 中间文件位置 | 常规 → 中间目录 |
| EXE 文件名 | 常规 → 目标名称 |
| 调试时的工作目录 | 调试 → 工作目录 |
| DLL 复制路径 | 生成后事件(用 $(TargetDir) 宏) |
- [原文链接]()
- 注:知识搬运,供学习交流使用,侵联删!