【问题标题】:How do I compile a Visual Studio project from the command-line?如何从命令行编译 Visual Studio 项目?
【发布时间】:2010-10-04 15:05:48
【问题描述】:

我正在为使用MonotoneCMake、Visual Studio Express 2008 和自定义测试的大型 C++ 解决方案编写签出、构建、分发、测试和提交周期脚本。

所有其他部分看起来都非常简单,但我不知道如何在没有 GUI 的情况下编译 Visual Studio 解决方案。

该脚本是用 Python 编写的,但我只需调用一个答案:os.system 就可以了。

【问题讨论】:

    标签: c++ python visual-studio-2008 command-line


    【解决方案1】:

    我知道有两种方法可以做到这一点。

    方法一
    第一种方法(我更喜欢)是使用msbuild

    msbuild project.sln /Flags...
    

    方法二
    你也可以运行:

    vcexpress project.sln /build /Flags...
    

    vcexpress 选项立即返回并且不打印任何输出。我想这可能是你想要的脚本。

    请注意,DevEnv 未随 Visual Studio Express 2008 分发(当我第一次遇到类似问题时,我花了很多时间试图弄清楚这一点)。

    所以,最终结果可能是:

    os.system("msbuild project.sln /p:Configuration=Debug")
    

    您还需要确保您的环境变量正确,因为默认情况下 msbuild 和 vcexpress 不在系统路径中。要么启动 Visual Studio 构建环境并从那里运行你的脚本,要么在 Python 中修改路径(使用os.putenv)。

    【讨论】:

    • 这也适用于 Visual Studio 2010 Express。
    • msbuild 似乎没有随 VS 2008 一起提供
    • 你能在“MSVS shell”之外运行它吗?
    【解决方案2】:

    MSBuild 通常可以工作,但我之前遇到过困难。你可能会有更好的运气

    devenv YourSolution.sln /Build 
    

    【讨论】:

    • MSBuild 不适用于 Visual Fortran 项目 ( *.vfproc )。感谢您将我指向 devenv,确实如此。
    • 也可以指定config:devenv YourSolution.sln /Build Debug
    • 效果很好。也可以使用以下命令进行重建 devenv YourSolution.sln /rebuild
    • 还可以通过在一个空格后附加调试或释放来重建发布或调试模式。例如:devenv YourSolution.sln /rebuild releasedevenv YourSolution.sln /rebuild debug
    • 如何在.sln soluton 中定位.prj 项目?
    【解决方案3】:

    说实话,我必须加上我的 2 美分。

    您可以使用 msbuild.exe 来完成。 msbuild.exe有很多版本。

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\msbuild.exe C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\msbuild.exe C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe

    使用您需要的版本。基本上你必须使用最后一个。

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe

    那么怎么做呢。

    1. 运行COMMAND窗口

    2. 输入msbuild.exe的路径

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe

    1. 输入项目解决方案的路径,如

    "C:\Users\Clark.Kent\Documents\visual studio 2012\Projects\WpfApplication1\WpfApplication1.sln"

    1. 在解决方案路径之后添加您需要的任何标志。

    2. ENTER

    请注意,您可以获得有关所有可能标志的帮助,例如

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /帮助

    【讨论】:

    • 我真的很喜欢您为新开发人员添加的详细信息,例如在哪里可以找到 msbuild 等。
    【解决方案4】:

    使用 msbuild 正如其他人指出的那样对我有用,但我需要做的不仅仅是这些。首先,msbuild 需要能够访问编译器。这可以通过运行来完成:

    "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
    

    然后msbuild 不在我的 $PATH 中,所以我必须通过它的显式路径运行它:

    "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln
    

    最后,我的项目使用了一些变量,例如$(VisualStudioDir)。似乎msbuild 没有设置它们,所以我不得不通过/property 选项手动设置它们:

    "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln
    

    那一行终于让我可以编译我的项目了。

    奖励:命令行工具似乎不需要像“免费”的基于 GUI 的 Visual Studio 社区版那样在使用 30 天后进行注册。有了 Microsoft 注册要求,该版本几乎不是免费的。如果有的话,就像在 Facebook 中一样免费......

    【讨论】:

      【解决方案5】:

      MSBuild is your friend.

      msbuild "C:\path to solution\project.sln"
      

      【讨论】:

      • 我已经看到由于 MSBuild 和 DevEnv 处理 .sln 文件的方式不同而在奇怪的情况下失败。
      【解决方案6】:

      DEVENV 在许多情况下都能正常工作,但在 WIXPROJ 上构建我的 WIX 安装程序时,我得到的只是 Out 日志中的“CATASTROPHIC”错误。

      这有效: MSBUILD /Path/PROJECT.WIXPROJ /t:Build /p:Configuration=Release

      【讨论】:

        【解决方案7】:

        dotnet build 似乎是构建解决方案的最新方式。

        https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build

        【讨论】:

          【解决方案8】:

          正确地,这里的答案中建议 MSBuild 和 DevEnv 作为从命令行构建的方法。我想指出,微软是这么说的:“一般来说,DEVENV 比直接使用 MSBuild 更受欢迎,因为你可以让 Visual Studio 处理 MSBuild 的复杂性。”

          Reference

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多