C++跨平台构建自动化

18

我有一个跨平台的C++项目,能够成功地在Linux、OSX和Windows上进行编译。我使用GNU Make来处理所有平台上的构建,并使用gcc在Linux和OSX下编译,cl.exe在Windows上的Cygwin下编译。我的当前工作流程是在OSX下编码,然后在每个单独的平台上构建以测试代码的可移植性。这个过程有些费时,我想知道是否可能在一步中自动在所有平台上构建?

3个回答

10

如果我理解正确,问题不在于替换make,而是如何在每个平台上启动构建?

我建议使用http://jenkins-ci.org/ - 它是基于Java开发的,可以在Windows、Linux、OSX等多个平台上运行。它可以配置为同时启动构建作业,以便在需要构建时每个平台都可以同时启动。

Jenkins的学习曲线并不可怕,但要使其正常工作可能需要花费3-4个小时,一旦完成后,就可以轻松愉快地使用了。

如果您想更加专业化,可以让Jenkins轮询源代码存储库,每次提交后它会自动启动构建。


9
好问题。首先,没有办法在一个平台上一步完成这些构建。但是你可以寻找一个构建系统,使跨平台构建变得容易和一个自动化工具来帮助你自动化这些过程。这样就可以解决手动构建的问题,让你完全专注于代码开发。 CMake(如前所述)为跨平台构建提供了良好的解决方案。简而言之,通过CMake,你可以获得针对特定平台的Visual Studio解决方案/项目、makefile等文件,然后在该特定平台上使用这些文件进行构建。你的工作是维护CMake构建文件,而CMake则负责生成你需要构建平台的特定构建文件。
你提到希望能够在“一个步骤”中构建生成物——这需要通过构建自动化进行略微不同的处理。也就是说,需要使用持续集成(CI)系统,例如提到的Jenkins、HudsonCruiseControl。在你的情况下,你需要在三个不同的平台(Windows、Linux和OSX)上进行构建,这意味着你需要在每个平台上运行CI。这些系统在设置后将检查源代码存储库中的更改,并在发现更改时获取源代码,然后使用CMake为CI所在的平台生成特定于平台的构建文件,然后进行构建、测试并最终报告构建情况。

6
供那些在 Jenkins 和 Hudson 之间做选择的人参考:两者基本上是相同的东西,只不过 Jenkins 是当 Oracle 接管 Hudson 时发生的原始开发者分支,Hudson 在 Oracle 控制下逐渐减少了支持,而 Jenkins 则是两者中更强大的一个。然而,Oracle 最近将 Hudson 赠送给了 Apache 项目,因此尚不清楚谁将是更强大的种子,但现在 Jenkins 是最强大的。 - synthesizerpatel

8
这听起来像是CMake的工作。

10
CMake要如何在一个步骤上在所有平台上构建?据我所知,在Linux或OSX上并没有cl.exe可用! - André Caron
2
CMake旨在使用平台工具来构建项目。即使OP想要真正的一站式构建,也可以参考这篇文章(http://www.cmake.org/Wiki/CMake_Cross_Compiling)。 - Andrew White
@Kerrek:没错,cmake确实很方便-但是当你想要发布你的应用到苹果应用商店时,你会遇到一些非常不方便的缺失功能(无法设置能力,不支持方案,无法添加“链接二进制框架”这是使能力正常工作所需的,无法正确添加多语言支持,因此它出现在“项目信息/本地化”中)。大部分可以通过一些努力解决(或者忽略xcode在项目属性中显示的内容),但我希望这些问题在未来能得到关注。 - kalmiya

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