【问题标题】:How to pass all Visual Studio 2008 "Macros" to Python script?如何将所有 Visual Studio 2008“宏”传递给 Python 脚本?
【发布时间】: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

其中只有四个(FrameworkDirFrameworkSDKDirVCInstallDirVSInstallDir)设置在用于构建事件的环境中。

正如 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


    【解决方案1】:

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

    【讨论】:

    • 我确实以与您相同的方式使用 .vsprops 文件来构建目录。用户定义的变量可以通过(只要 PerformEnvironmentSet="true"),但由于某种原因,几乎所有的内置变量都没有。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 好主意,但可从 VisualStudio 构建事件调用的命令行的长度有限制。大概是 128 或 256 个字符。调用 N 个脚本太短了,其中 N = #macros(大约 43 个内置函数加上用户定义的任何函数。)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-10
      • 2012-01-22
      • 1970-01-01
      • 2011-12-03
      • 2013-10-24
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多