VC++2019更改Debug与Release生成文件路径

正文

在 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 反而更快。

  1. 右键项目 → 卸载项目。
  2. 右键项目 → 编辑 AoTopDoneList.vcxproj。
  3. 找到每个 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>
  1. 保存,右键项目 → 重新加载项目。

五、注意与 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

六、快速验证

改完后:

  1. 生成 → 清理解决方案。
  2. 手动删除旧的 Debug\、Release\ 目录(避免混淆)。
  3. 生成 → 重新生成解决方案。
  4. 到新的 bin\Debug\ 和 bin\Release\ 目录确认 EXE 已生成,且 WebView2Loader.dll 也在旁边(如采用动态链接)。

一句话总结

配置属性 → 常规 → 输出目录 / 中间目录,配合 $(SolutionDir)、$(Configuration) 等宏,一份设置即可让 Debug/Release、Win32/x64 自动分目录,同时别忘了检查 调试工作目录 和 生成后事件 是否跟随新路径。

要改的内容 修改位置
EXE 输出位置 常规 → 输出目录
中间文件位置 常规 → 中间目录
EXE 文件名 常规 → 目标名称
调试时的工作目录 调试 → 工作目录
DLL 复制路径 生成后事件(用 $(TargetDir) 宏)

  • [原文链接]()
  • 注:知识搬运,供学习交流使用,侵联删!