詹金斯&x2B;Windows+;CMake+;多种生成类型(调试、发布)
我怎样才能让詹金斯做到以下几点詹金斯&x2B;Windows+;CMake+;多种生成类型(调试、发布),windows,jenkins,cmake,Windows,Jenkins,Cmake,我怎样才能让詹金斯做到以下几点 从SVN签出trunk/然后使用CMake调试和发布构建配置,而不必为配置创建重复作业。使用。使用值Debug和Release将其中一个轴定义为build_模式。然后运行CMake,为将要使用的编译工具(XCode、gcc、VisualStudio等)创建两种配置。然后,您可以像使用环境变量一样使用build_模式,并将其传递给执行实际编译的构建步骤。我花了一段时间才弄明白这一点。下面是我如何做到这一点的 创建一个自由风格的作业“签出”。此作业将完成所有不依赖于配
从SVN签出trunk/然后使用CMake调试和发布构建配置,而不必为配置创建重复作业。使用。使用值Debug和Release将其中一个轴定义为build_模式。然后运行CMake,为将要使用的编译工具(XCode、gcc、VisualStudio等)创建两种配置。然后,您可以像使用环境变量一样使用build_模式,并将其传递给执行实际编译的构建步骤。我花了一段时间才弄明白这一点。下面是我如何做到这一点的
cd c:\
rmdir /S /Q build
mkdir build
cd build
cmake --version
rem optionally: svn info c:\src
cmake -G "Visual Studio 10" c:\src
cd c:\build
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
msbuild ALL_BUILD.vcxproj /verbosity:minimal /maxcpucount:1 /property:Configuration=%configuration%
msbuild <solution>.sln /target:<project>
msbuild.sln/目标:
在使用Jenkins一段时间后,我发现如果要重用源目录,应该使用尽可能少的作业
Jenkins中的默认设置是每个构建使用不同的目录作为其工作区。这意味着您要对每个构建进行完整的SVN签出。这需要永远
如果您希望对每个构建使用相同的源目录,那么您必须担心同步问题:一次只能使用一个构建。据我所知,詹金斯没有内置的同步方法。唯一的方法是只使用一个执行器。即使这样,你也无法控制执行人选择下一份工作的方式
假设作业“SVN更新”触发作业“构建”。有人启动了“SVN更新#33”,这应该会触发“构建#33”。然而,如果Jenkins的“Poll SCM”功能同时安排“SVN update”34,我还没有找到一种方法告诉它“Build”33必须在“SVN update”34之前运行。因此,您可能会在“Build#33”之前运行“SVN update#34”,而所有操作都会失败。除非手动禁用轮询作业。当然,提醒自己以后重新启用它
无论如何。使用Jenkins两年后,我将答案改为:永远不要使用共享资源的多个作业(如source dir),并将所有逻辑烘焙到shell脚本中(用于循环配置)。使用Visual Studio generator时,可以将要构建的配置传递到
cmake--build
-命令:
cmake --build . --config Release
cmake --build . --config Debug
另请参见。谢谢您的回答。我想了很多,但我花了很长时间才把细节搞定。如果答案真的很有帮助的话,请考虑一下。我把$build_type放在“Other build type”中,但它没有扩展它。据我所知,“camke--build.”将始终生成调试版本。您必须执行msbuild Project.sln/m/p:Configuration=Release for Release您可以在“Build”作业运行时使用-plugin阻止“SVN update”作业。这取决于您使用的生成器。这对Makefile之类的生成器没有影响。您不需要忘记传递CMAKE_BUILD_TYPE选项以生成步骤:
CMAKE-DCMAKE_BUILD_TYPE=Release
因为问题是关于Windows的,我假设是Visual Studio,所以我将编辑我的答案。