在 Visual Studio 中,有许多内置的宏(也称为生成宏或 MSBuild 属性),这些宏可以在项目配置、文件路径、自定义生成步骤等场景中使用。以下是 Visual Studio 中最常用的内置宏及其用途:
核心项目宏
宏名 | 描述 | 示例值 |
---|---|---|
$(SolutionDir) |
解决方案目录(以反斜杠结尾) | C:\Projects\MyApp\ |
$(ProjectDir) |
项目目录(以反斜杠结尾) | C:\Projects\MyApp\MyProject\ |
$(Configuration) |
当前配置名称(Debug/Release) | Debug |
$(Platform) |
当前平台名称(x86/x64) | x64 |
$(TargetName) |
输出文件名称(不含扩展名) | MyApp |
$(TargetExt) |
输出文件扩展名 | .exe |
$(TargetFileName) |
完整输出文件名 | MyApp.exe |
$(TargetPath) |
输出文件的完整路径 | C:\Projects\MyApp\bin\Debug\MyApp.exe |
目录路径宏
宏名 | 描述 | 示例值 |
---|---|---|
$(OutDir) |
输出文件目录(以反斜杠结尾) | bin\Debug\ |
$(IntDir) |
中间文件目录(以反斜杠结尾) | obj\Debug\ |
$(SolutionPath) |
解决方案文件的完整路径 | C:\Projects\MyApp\MyApp.sln |
$(ProjectPath) |
项目文件的完整路径 | C:\Projects\MyApp\MyProject.csproj |
开发环境宏
宏名 | 描述 | 示例值 |
---|---|---|
$(DevEnvDir) |
Visual Studio 安装目录 | C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\ |
$(VCInstallDir) |
VC++ 工具集目录 | C:\Program Files\Microsoft Visual Studio\2022\Community\VC\ |
$(WindowsSdkDir) |
Windows SDK 目录 | C:\Program Files (x86)\Windows Kits\10\ |
$(FrameworkDir) |
.NET Framework 目录 | C:\Windows\Microsoft.NET\Framework\ |
$(FrameworkVersion) |
.NET Framework 版本 | v4.8 |
高级宏
宏名 | 描述 |
---|---|
$(MSBuildProjectDirectory) |
包含项目文件的目录 |
$(MSBuildProjectName) |
项目文件名(不含扩展名) |
$(MSBuildThisFileDirectory) |
当前处理的文件所在目录 |
$(MSBuildThisFileFullPath) |
当前处理的文件完整路径 |
$(MSBuildBinPath) |
MSBuild 二进制文件目录 |
$(MSBuildToolsVersion) |
MSBuild 工具版本号(如 17.0) |
特殊用途宏
宏名 | 描述 |
---|---|
$(SolutionFileName) |
解决方案文件名(带扩展名) |
$(ProjectFileName) |
项目文件名(带扩展名) |
$(RemoteMachine) |
远程调试机器设置 |
$(WebDeployPath) |
Web 部署路径 |
$(AssemblySearchPaths) |
程序集搜索路径列表 |
使用示例
在项目属性中配置输出目录:
$(SolutionDir)bin\$(Platform)\$(Configuration)\
在附加包含目录中使用:
$(SolutionDir)include;$(WindowsSdkDir)include
在生成后事件中使用:
copy "$(TargetPath)" "D:\Backup\$(TargetFileName)"
在调试命令参数中使用:
-config "$(ProjectDir)config.json"
查看所有宏的方法
通过项目属性查看:
- 打开项目属性 → C/C++ → 命令行
- 点击右下角"宏"按钮查看完整列表和当前值
在预生成/生成后事件中查看:
echo SolutionDir = $(SolutionDir) echo ProjectDir = $(ProjectDir) echo Configuration = $(Configuration) pause
使用 MSBuild 命令查看:
msbuild /pp:temp.xml MyProject.vcxproj
然后在生成的 temp.xml 文件中搜索 PropertyGroup
重要提示
- 宏名不区分大小写(
$(SolutionDir)
和$(SOLUTIONDIR)
相同) - 宏的值会根据当前配置(Debug/Release)和平台(x86/x64)自动变化
- 在路径中使用宏时,建议加上引号:
"$(SolutionDir)ThirdParty\libs"
- 可以创建自定义宏:项目属性 → 配置属性 → 常规 → 宏定义
这些宏在配置项目路径、设置编译选项、自定义生成步骤等方面非常有用,能够使项目配置更加灵活和可移植。