Visual Studio - 如何自动化构建过程?

4
我有一个包含多个项目的C++解决方案。在编译过程中,我需要使用Win32模式构建部分项目。然后执行几个shell命令。之后,在x64模式下构建几个项目。再执行几个shell命令。最后,在Win32模式下构建一个项目。
我已经厌倦了手动重复这些步骤。我该如何自动化所有这些步骤呢?
我使用的是Visual Studio 2015。

1
它们可以在项目的预/后构建步骤中运行吗? - Borgleader
1
在像这样复杂的情况下,我会编写一个Python构建脚本来构建所有内容。它比make和VS都更具控制和灵活性。虽然需要一些前期投入,但对于多年项目而言,回报非常可观。 - Jacques de Hooge
@Borgleader 谢谢。后构建事件完美地满足了我的需求。 - Victor Mezrin
@JacquesdeHooge 谢谢。现在的后构建事件对我很有帮助。您能否告诉我如何通过Python脚本/Shell命令从解决方案启动项目的构建过程?是否有适用于Visual Studio构建引擎的命令行界面? - Victor Mezrin
2个回答

4
我建议结合使用MSBuild XML自动化和Jenkins。具体如下: MSBuild:它随Visual Studio一起提供。您需要访问VS命令提示符才能访问它。在VS命令提示符中,如果输入“MSBuild your_project.vcproj”,它将为您构建它。 MSBuild XML文件:您可以创建一个简单的XML文件并将其传递给MSBuild。这将极大地帮助您组织构建过程。虽然这是一个广泛的话题,但您可以将其视为Microsoft样式的makefile/build系统(尽管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 : 安装后,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 冲突,这非常令人失望。但是,我还没有检查 TFS 2015。

一般建议:由于它是一个中央解决方案,我强烈建议将大多数逻辑都实现在 MSBuild XML 文件中,因为这将使您的构建系统也很容易通过命令行调用,并且易于在 Jenkins、TFS 或其他系统之间切换。

其他注意事项:

  1. 如果只是 MSVC 2015,则可以避免安装 Visual Studio,因为 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?


0

针对同一任务,我已经使用TeamCity配置了本地构建服务器。它完美地满足了您的要求。这里是如何创建构建配置的说明


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接