2

[注意:这个问题与这个问题相似但不一样。]

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             

其中,只有四个(、 和FrameworkDirFrameworkSDKDir设置在用于构建事件的环境中。VCInstallDirVSInstallDir

正如 Brian 所提到的,用户定义的宏可以定义为设置在构建任务执行的环境中。我的问题是内置宏。

作为构建过程的一部分,我使用 Visual Studio 构建后事件来运行 python 脚本。我想将整个宏集(内置和用户定义)传递给我在环境中的脚本,但我不知道如何。在我的脚本中,我可以访问常规环境变量(例如,Path、SystemRoot),但不能访问这些“宏”。我现在所能做的就是将它们作为命名选项逐个传递,然后在我的脚本中进行处理。例如,这是我的 Post-Build Event 命令行的样子:

    postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"

除了让人头疼之外,Post-Build Event 命令行的大小也有限制,所以即使我想通过这种方法也无法传递几十个宏,因为命令行被截断了。

有谁知道是否有办法将整组宏名称和值传递给不需要切换到 MSBuild(我认为它不适用于本机 VC++)或其他类似 make 的构建工具的命令?

4

3 回答 3

2

您可能想查看 PropertySheets。这些是包含 Visual C++ 设置的文件,包括用户宏。图纸可以从其他图纸继承,并使用 Visual Studio 中的 PropertyManager 视图附加到 VC++ 项目。当您创建其中一张表时,会有一个用于创建用户宏的界面。当您使用此机制添加宏时,有一个用于将用户宏设置为环境变量的复选框。我们在构建系统中使用这种类型的机制来快速设置项目以执行异地构建。我们的各种构建目录都定义为用户宏。我实际上并没有验证环境变量是在从构建后调用的外部脚本中设置的。

于 2008-09-25T18:29:30.580 回答
0

这有点hacky,但它可以工作。

为什么不连续调用多个 .py 脚本?

每个脚本都可以将一小部分参数和值传递给临时文本文件。最终脚本将读取并处理临时文本文件。

我同意这种方法充满了危险和WTF,但有时你必须把东西拼凑在一起。

于 2008-09-25T00:24:23.467 回答
0

据我所知,问题中描述的方法是将构建变量传递给 Python 脚本的唯一方法。

也许 Visual Studio 2010 有更好的东西?

于 2011-01-14T20:28:15.937 回答