代码之家  ›  专栏  ›  技术社区  ›  jwfearn

如何将所有Visual Studio 2008“宏”传递给python脚本?

  •  2
  • jwfearn  · 技术社区  · 16 年前

    [注:此问题与 不一样 作为 this one ]

    VisualStudio定义了几十个“宏”,这些宏是模拟环境变量(完全与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)"
    

    除了让人头疼之外,构建后事件命令行的大小也有限制,因此即使我想使用此方法传递几十个宏,也不能使用此方法,因为命令行被截断了。

    是否有人知道是否有一种方法可以将整个宏名称和值集传递给不需要切换到msbuild(我认为这对于本机VC++不可用)或其他make-like生成工具的命令?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Brian Stewart    16 年前

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

        2
  •  0
  •   TonyOssa    16 年前

    这有点老土,但可以用。

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

    每个脚本都可以将参数的一个子集和值传递给一个临时文本文件。最后一个脚本将读取临时文本文件并运行。

    我同意这种方法充满了危险和wtf的,但有时你必须一起黑东西。

        3
  •  0
  •   jwfearn    14 年前

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

    也许Visual Studio 2010有更好的功能?