[注意:这个问题与这个问题相似但不一样。]
Visual Studio 定义了几十个“宏”,它们是一种模拟环境变量(与 C++ 宏完全无关),其中包含有关正在进行的构建的信息。例子:
配置名称发布 目标路径 D:\work\foo\win\Release\foo.exe VCInstallDir C:\ProgramFiles\Microsoft Visual Studio 9.0\VC\
这是我看到的完整的 43 个内置宏集(您的宏可能会有所不同,具体取决于您使用的 VS 版本和启用的工具):
ConfigurationName IntDir RootNamespace TargetFileName DevEnvDir OutDir SafeInputName TargetFramework FrameworkDir ParentName SafeParentName TargetName FrameworkSDKDir PlatformName SafeRootNamespace TargetPath FrameworkVersion ProjectDir SolutionDir VCInstallDir FxCopDir ProjectExt SolutionExt VSInstallDir InputDir ProjectFileName SolutionFileName WebDeployPath InputExt ProjectName SolutionName WebDeployRoot InputFileName ProjectPath SolutionPath WindowsSdkDir InputName 引用 TargetDir WindowsSdkDirIA64 InputPath RemoteMachine TargetExt
其中,只有四个(、 和FrameworkDir
)FrameworkSDKDir
设置在用于构建事件的环境中。VCInstallDir
VSInstallDir
正如 Brian 所提到的,用户定义的宏可以定义为设置在构建任务执行的环境中。我的问题是内置宏。
作为构建过程的一部分,我使用 Visual Studio 构建后事件来运行 python 脚本。我想将整个宏集(内置和用户定义)传递给我在环境中的脚本,但我不知道如何。在我的脚本中,我可以访问常规环境变量(例如,Path、SystemRoot),但不能访问这些“宏”。我现在所能做的就是将它们作为命名选项逐个传递,然后在我的脚本中进行处理。例如,这是我的 Post-Build Event 命令行的样子:
postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"
除了让人头疼之外,Post-Build Event 命令行的大小也有限制,所以即使我想通过这种方法也无法传递几十个宏,因为命令行被截断了。
有谁知道是否有办法将整组宏名称和值传递给不需要切换到 MSBuild(我认为它不适用于本机 VC++)或其他类似 make 的构建工具的命令?