[注意:此问题类似于与this one不一样。]
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 Post-Build事件来运行python脚本作为构建过程的一部分。我想将整套宏(内置和用户定义)传递给我在环境中的脚本,但我不知道如何。在我的脚本中,我可以访问常规环境变量(例如,Path,SystemRoot),但不能访问这些“宏”。我现在所能做的就是将它们作为命名选项逐个传递,然后在我的脚本中处理。例如,这就是我的Post-Build Event命令行:
postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"
除了颈部疼痛外,Post-Build Event命令行的大小也有限制,所以即使我想这样,我也无法使用此方法传递数十个宏,因为命令行被截断了。
有没有人知道是否有办法将整个宏名称和值集传递给不需要切换到MSBuild的命令(我相信它不适用于本机VC ++)或其他一些类似make的构建工具?
答案 0 :(得分:2)
您可能需要查看PropertySheets。这些是包含Visual C ++设置的文件,包括用户宏。工作表可以从其他工作表继承,并使用Visual Studio中的PropertyManager视图附加到VC ++项目。创建其中一个工作表时,有一个用于创建用户宏的界面。使用此机制添加宏时,会出现一个用于将用户宏设置为环境变量的复选框。我们在构建系统中使用这种类型的机制来快速设置项目以执行不正常的构建。我们的各种构建目录都被定义为用户宏。我实际上没有验证环境变量是在从post-build调用的外部脚本中设置的。我倾向于使用这些宏作为构建后脚本的命令行参数 - 但我希望能够访问它们,因为环境变量应该适合你。
答案 1 :(得分:0)
这有点笨拙,但它可以奏效。
为什么不连续调用多个.py脚本?
每个脚本都可以传入一小部分参数,并将值传递给临时文本文件。最终的脚本将读取和处理临时文本文件。
我同意这种方法充满了危险和WTF,但有时候你必须把东西放在一起。
答案 2 :(得分:0)
据我所知,问题中描述的方法是将构建变量传递给Python脚本的唯一方法。
也许Visual Studio 2010有更好的东西?