【问题标题】:Visual Studio - how to automate build process?Visual Studio - 如何自动化构建过程?
【发布时间】:2016-12-17 03:45:49
【问题描述】:

我有一个包含许多项目的 C++ 解决方案。在编译期间,我需要在 Win32 模式下构建部分项目。然后执行几个shell命令。然后在 x64 模式下构建几个项目。然后再执行几个 shell 命令。然后,最后,在 Win32 模式下再构建一个项目。

我厌倦了一次又一次地手动执行此操作)如何自动化所有这些步骤?

我使用 Visual Studio 2015

【问题讨论】:

  • 它们可以在项目的前/后构建步骤中运行吗?
  • 在这样的复杂情况下,我编写了一个 Python 构建脚本来构建所有内容。它给了我比 make 更多的控制力和灵活性,而且远远超过 VS。这是一项前期投资,但对于一个多年项目来说,它的回报是巨大的。
  • @Borgleader 谢谢。构建后活动完全符合我的需求。
  • @JacquesdeHooge 谢谢。现在后期构建活动对我有好处。你能告诉未来 - 如何通过 python 脚本/shell 命令从解决方案启动项目的构建过程? Visual Studio 构建引擎是否有任何命令行界面?

标签: c++ visual-studio build visual-studio-2015


【解决方案1】:

我建议结合使用 MSBuild XML 自动化和 Jenkins。详细:

MSBuild :它带有 Visual Studio。您需要访问 VS 命令提示符才能访问它。在 VS 命令提示符下,如果您键入“MSBuild your_project.vcproj”,它将为您构建它。

MSBuild XML 文件:您可以创建一个简单的 XML 文件并将其传递给 MSBuild。这将极大地帮助您组织构建过程。这是一个很大的话题,但是,您可以将其视为 Microsoft 风格的 makefile/构建系统(即使 Microsoft 有 nmake ),而且更方便。您可以定义目标、设置变量、放置条件、并行构建、设置操作以调用 shell 命令。一个非常简单的看起来像:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <CPPProject>your_cpp_project.sln</CPPProject>
    <powershell_execute>powershell.exe -executionpolicy bypass -command</powershell_execute>
    <UtilityScript>utility.ps1</UtilityScript>
  </PropertyGroup>

  <Target Name="Build">
    <Exec Command="msbuild.exe $(CPPProject) /p:Configuration=Release /p:Platform=Win32" />
    <Exec Command="msbuild.exe $(CPPProject) /p:Configuration=Release_x64 /p:Platform=x64" />
    <Exec Command="$(powershell_execute) $(UtilityScript) args" />
  </Target>

    <Target Name="Clean">
        <!-- DO YOUR CLEANING HERE-->
  </Target>

</Project>

Jenkins:一旦你安装了它,它将作为一个 Windows 服务运行,它有它的嵌入式 HTTP 服务器。您可以通过 localhost:8080 使用浏览器快速访问它。 Jenkins 本身是另一个主题,但我发现自动化命令并将它们组织为作业定义非常方便。

额外的酱汁(Powershell 和 MSBuild 扩展): 因为您可以从 MSBuild 或 Jenkins 调用命令,所以您始终可以使用 Powershell(如果需要,您还可以在其中内联 C# 代码)我发现了这个在我需要快速轻松地实现自定义逻辑(例如在每次发布之前增加次要版本等)时很有用。请注意,还有用于丰富 MSBuild XML 功能的扩展包。

Jenkins 和 TFS 作为替代方案的缺点: Jenkins 通常非常方便。 Windows 的主要缺点是着色控制台输出并不简单,但是可以处理。总的来说,我发现它非常稳定。另一方面,TFS 已经是 Microsoft 解决方案,我不确定它的许可选项,但它也可以替代 Jenkins。在这种情况下,您将更多地依赖 MSBuild XML 文件。对我来说,TFS 2013 的缺点之一是,由于与 Microsoft 的 http.sys 的一些冲突,它在网络操作中并不总是准确地工作,这非常令人失望。但是,我没有检查过 TFS2015

一般建议:因为它是一个中心解决方案,我强烈建议您在 MSBuild XML 文件中实现大部分逻辑,因为这将使您的构建系统也可以通过命令行轻松调用,并且易于在 Jenkins、TFS 等不同系统之间切换

其他说明:

  1. 如果只是 MSVC 2015,您可能会避免安装 VisualStudio,因为 MSVC2015 具有独立版本:https://blogs.msdn.microsoft.com/vcblog/2015/11/02/announcing-visual-c-build-tools-2015-standalone-c-tools-for-build-environments/

  2. 如果您采用 Jenkins 方式,您需要处理的第一件事就是访问 Visual Studio 命令提示符。在这种情况下,请参阅:How do I write a build batch script that runs vcvars32.bat, and then continues with the build?

【讨论】:

    【解决方案2】:

    对于相同的任务,我使用TeamCity 配置了本地构建服务器。它完美地满足您的要求。这是instruction,了解如何创建构建配置。

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2010-09-06
      • 2011-10-17
      • 2017-02-04
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多