C++ 如何使用jenkins构建32位和64位程序并封装在一个包中
这是另一个向堆栈溢出寻求帮助的时间 我想用詹金斯, 我的目标是构建一个包含32位和64位版本的windows安装包 我以前的手动例行程序是: 分别构建32位和64位,并使用innoSetup构建包含2个版本的包 如果使用jenkins,程序将为:C++ 如何使用jenkins构建32位和64位程序并封装在一个包中,c++,windows,jenkins,cmake,compilation,C++,Windows,Jenkins,Cmake,Compilation,这是另一个向堆栈溢出寻求帮助的时间 我想用詹金斯, 我的目标是构建一个包含32位和64位版本的windows安装包 我以前的手动例行程序是: 分别构建32位和64位,并使用innoSetup构建包含2个版本的包 如果使用jenkins,程序将为: linux jenkins服务器(主服务器)向windowns jenkins服务器(代理)发送生成请求 来自svn的代理签出代码 用2个版本构建包 我猜主机需要向代理发送两个请求(或者一个请求触发两个作业以分别构建两个版本,对不起,我对jenkins
谢谢…不需要使用单独的
CMakeLists.txt
文件。您可以通过在project()
命令后检查CMAKE\u SIZEOF\u 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代理上的构建;作业不限于单个代理,每个作业可以在代理上执行多个操作…为什么您认为需要不同版本的CMakeList.txt文件来编译不同的配置?这感觉很像CMake反模式。