【问题标题】:launching vs2008 build from python从 python 启动 vs2008 构建
【发布时间】:2008-11-04 23:08:03
【问题描述】:

第一个批处理文件启动命令提示符,我需要第二个命令位于第一个命令的上下文中。我如何在 python 中做到这一点?

按原样,它启动批处理,并阻塞直到批处理(及其命令提示符上下文)终止,然后在没有必要上下文的情况下执行devenv

os.system(r'%comspec% /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86')
os.system(r'devenv asdf.sln /rebuild Debug /Out last-build.txt')

把它想象成我在 bash 中,我需要在 perl 上下文中执行命令,所以我输入 perl -c 'asdf'。背靠背执行 perl 和 asdf 将不起作用,我需要在 perl 上下文中获取devenv

【问题讨论】:

  • 您没有启动 msbuild 是否有原因?

标签: python windows visual-studio-2008 build-automation


【解决方案1】:

我认为实现此目的的正确方法是运行以下命令:

%comspec% /C "%VCINSTALLDIR%\vcvarsall.bat" x86 && vcbuild "project.sln"

您将在下面看到同一命令的 Python 版本:

os.system('%comspec% /C "%VCINSTALLDIR%\\vcvarsall.bat" x86 && vcbuild "project.sln"')

这应该适用于任何 Visual Studio,因此最好编辑问题以使其更通用。

关于 vcvarsall.bat 的位置我发现了一个小问题 - 因为 VCINSTALLDIR 并不总是设置,所以您必须使用注册表项来检测安装程序的位置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0]
"InstallDir"="c:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\"

..\..\VC\vcvarsall.bat 添加到此路径。测试其他版本的 Visual Studio 也是一个好主意。

【讨论】:

    【解决方案2】:

    在这些情况下,我使用可以完成所有任务的脚本。这样你就可以尽可能多地链接。有时我会即时生成脚本。

    compileit.cmd
      call C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
      devenv $1.sln /rebuild Debug /Out last-build.txt
    

    【讨论】:

    • 第二次投票生成脚本然后运行它。将命令行放入一个文件中,然后调用它,然后删除该文件。为您节省了另一个必须在主构建脚本之外维护的构建工件(对我们来说是 ant)。
    • 仅供参考:除非您使用“call”命令调用 vcvarsall.bat,否则 devenv.exe 永远不会被执行。
    • devenv 不是进行命令行构建的正确方法。对于 vc =10.0 的版本应该使用 msbuild。
    【解决方案3】:

    您可以将 devenv 命令附加到原始批处理文件的末尾,如下所示:

    '%comspec% /k "...vcvarsall.bat" x86 && devenv asdf.sln /rebuild ...'
    

    (显然,为了简单起见,我已经缩短了命令)

    【讨论】:

      【解决方案4】:

      我从一个设置变量的批处理文件运行我的 Python 脚本 :-)

      call ...\vcvarsall.bat
      c:\python26\python.exe myscript.py
      

      但布雷特的解决方案听起来更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多