【发布时间】:2016-02-27 16:47:35
【问题描述】:
我有一个 CMake 示例项目,我想在 Ubuntu 15.10 上运行的 Jenkins 上构建它。我已经安装了:
https://wiki.jenkins-ci.org/display/JENKINS/CMake+Plugin
并创建了两个构建步骤:
- 运行 CMake 生成 makefiles
- 从构建目录运行 make all
效果很好:
[build] $ cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug /var/lib/jenkins/workspace/cmake-test/cmake-gtest/src
-- Configuring done
-- Generating done
-- Build files have been written to: /var/lib/jenkins/workspace/cmake-test/cmake-gtest/build
[build] $ /usr/bin/make
[ 4%] Built target libfoo
[ 9%] Built target libbar
[ 14%] Built target myApp
[ 52%] Built target gmock
[ 90%] Built target gtest
[100%] Built target testfoo
[cmake-test] $ /bin/sh -xe /tmp/hudson1792271459427590561.sh
+ cd cmake-gtest/build
+ make all
[ 4%] Built target libfoo
[ 9%] Built target libbar
[ 14%] Built target myApp
[ 52%] Built target gmock
[ 90%] Built target gtest
[100%] Built target testfoo
Finished: SUCCESS
但这是在 CI/Jenkins 设置中使用 CMake 的推荐方法吗?
目前,我的 CMake/Jenkins 构建将在每次推送时进行; 1) 生成 makefile,2) 构建项目。
我有点担心第一步 1) 生成 makefile 会占用构建时间,而且在每次推送时执行此步骤似乎并不是最佳选择。特别是因为我不希望经常更改 CMakeLists.txt 文件,但是当它们更改新生成的文件时,当然应该使用。
上述方法是我必须习惯的常见做法还是我错过了什么?
【问题讨论】:
-
“生成makefile”是否需要足够的时间来担心?虽然它可能不会经常更改,但有一个单独的步骤或在有更改时弄乱构建确实不是一个好的解决方案......
-
是的,这也是我关心的问题,比抱歉更安全,解决方案是确保在我的应用程序增长时将其分解为更小更快的部分。重新考虑上面的两个构建步骤,1)cmake/generate,2)运行 make all 作为代码生成步骤的一部分,有没有办法做到这一点?还是他们完全独立,应该这样对待?
-
我不太确定你在问什么。总的来说,我的态度是“采用足以解决当前问题的最简单的解决方案”,在您真正有充分理由之前不要使事情复杂化。我在我的 Jenkins 系统(在家)上运行了三个不同的工作:“使用 clang++ 构建 + 运行所有测试”、“使用 g++ 构建 + 运行所有测试”——这些工作每 15 分钟检查一次 git repo 中的新提交,第三个就是下载 LLVM 的版本和我的代码,并根据项目中的构建脚本将它们一起构建 - 每晚一次。
-
从上面的截图我有两个构建步骤:1:生成makefile,1:运行make。我只是想知道它是否可以一步完成,以及 cmake 是否有一些 post step 命令用于在生成 make 文件后进行实际构建。
-
似乎很明智,无论如何你都需要这样做。拥有两个部分的唯一好处是,如果在测试完成之前开始另一个代码构建需要足够长的时间,或者类似的。