【发布时间】:2010-09-12 22:26:42
【问题描述】:
[注意:这个问题与this one类似但不一样。]
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 的构建工具的命令?
【问题讨论】:
标签: python visual-studio visual-studio-2008 visual-c++ visual-studio-2005