现在是另一个寻求堆栈溢出帮助的时候了。
我想利用詹金斯,我的目标是构建一个包含32位和64位版本的windows安装包。
我以前的手动程序是:分别构建了32位和64位,并使用innoSetup构建了包含两个版本的包。
如果使用詹金斯,程序将是:
- 一个linux詹金斯服务器(主服务器(向windowns-jenkins服务器(代理(发送一个构建请求
- svn中的代理签出代码
- 构建了包含两个版本的包
我想主需要向代理发送2个请求(或者可能是一个触发2个作业的请求,以分别构建2个版本,对不起,我是詹金斯的新手(
但不幸的是,32、64位需要不同的CMakeLists.txt,因为它们需要链接到第三方库。(需要在cmakeList中设置第三个库的路径(
但是svn代码只是一个副本,所以CMakeList.txt将是相同的。(以手动方式,我将在构建特定版本时修改cmakeList(
所以我不知道该怎么做?
有办法转身吗?(创建另一个svn存储库?(
谢谢。。。
不需要使用单独的CMakeLists.txt
文件。您可以通过在project()
命令之后检查CMAKE_SIZEOF_VOID_P
来区分32位和64位版本。这允许您将特定于32/64位的逻辑保持分离。
此外,您可以在通过-D VAR_NAME=value
设置cmake时设置缓存变量。
CMakeLists.txt
...
project(MyProject)
add_executable(MyProgram main.cpp wordsizeDependent.h)
# additional logic that depends on 32/64 bit
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
target_sources(MyProgram PRIVATE x64/wordsizeDependent.cpp)
else()
target_sources(MyProgram PRIVATE Win32/wordsizeDependent.cpp)
endif()
由于我不熟悉jenkins-cmake插件,我将使用bat
步骤,假设您使用jenkins管道,并假设目录repo
包含CMakeLists.txt
文件。此外,build64
和build32
应该已经存在并且是干净的(或者至少不包含导致与预期行为不同的缓存值(。
此外,我假设逻辑运行在正确的jenkins节点上,并且cmake安装在那里。
// 64 bit build
bat """cmake -G "Visual Studio 16 2019" -A x64 -S repo -B build64
cmake --build build64 --config Release"""
// 32 bit build
bat """cmake -G "Visual Studio 16 2019" -A Win32 -S repo -B build32
cmake --build build32 --config Release"""
您可能需要添加一个cpack
调用,使用innoSetup并将生成的包传输到相应机器上的相应位置。这将使用相同的作业构建32位和64位。如果需要的话,您甚至可以在同一个作业中运行linux和windows代理上的构建;作业不限于单个代理,每个作业可以在代理上做多件事。。。