如何将所有Visual Studio 2008"宏"传递给Python脚本?
[注意:这个问题类似于但不相同。]
Visual Studio定义了几十个"宏",它们是一种模拟的环境变量(与C ++宏完全无关),其中包含有关正在进行的构建的信息。例子:
ConfigurationName Release TargetPath 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 References TargetDir WindowsSdkDirIA64 InputPath RemoteMachine TargetExt
其中,在用于构建事件的环境中仅设置了四个(FrameworkDir,FrameworkSDKDir,VCInstallDir和VSInstallDir)。
正如Brian提到的那样,可以定义用户定义的宏,例如在执行构建任务的环境中进行设置。我的问题是内置宏。
在构建过程中,我使用Visual Studio生成后事件来运行python脚本。我想将整个宏集(内置的和用户定义的)传递给环境中的脚本,但是我不知道如何。在我的脚本中,我可以访问常规环境变量(例如,Path,SystemRoot),但不能访问这些"宏"。我现在所能做的就是将它们作为命名选项逐个传递,然后在脚本中进行处理。例如,这是我的"构建后事件"命令行的样子:
postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"
除了使我们痛苦不堪外,Post-Build Event命令行的大小也有限制,因此,即使我想这样做,我也无法传递数十个宏,因为命令行被截断了。
有谁知道是否有一种方法可以将整个宏名称和值集传递给一个不需要切换到MSBuild(我相信不适用于本机VC ++)或者其他类似make的构建工具的命令?
解决方案
这有点hacky,但是可以用。
为什么不连续调用多个.py脚本?
每个脚本可以传递参数的一小部分,并将值传递到临时文本文件。最终脚本将读取临时文本文件并开始工作。
我同意这种方法充满了危险和WTF,但有时我们只需要一起破解东西即可。
我们可能需要研究PropertySheets。这些是包含Visual C ++设置(包括用户宏)的文件。图纸可以从其他图纸继承,并使用Visual Studio中的PropertyManager视图添加到VC ++项目。当我们创建这些工作表之一时,就会有一个用于创建用户宏的界面。使用此机制添加宏时,会出现一个复选框,用于将用户宏设置为环境变量。我们在构建系统中使用这种类型的机制来快速设置项目以执行异地构建。我们的各种构建目录都定义为用户宏。我实际上尚未验证是否在从构建后调用的外部脚本中设置了环境变量。我倾向于将这些宏用作构建后脚本的命令行参数,但我希望访问它们,因为环境变量应该对我们有用。