如何使用jenkins构建32位和64位程序并封装在一个包中



现在是另一个寻求堆栈溢出帮助的时候了。

我想利用詹金斯,我的目标是构建一个包含32位和64位版本的windows安装包。

我以前的手动程序是:分别构建了32位和64位,并使用innoSetup构建了包含两个版本的包。

如果使用詹金斯,程序将是:

  1. 一个linux詹金斯服务器(主服务器(向windowns-jenkins服务器(代理(发送一个构建请求
  2. svn中的代理签出代码
  3. 构建了包含两个版本的包

我想主需要向代理发送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文件。此外,build64build32应该已经存在并且是干净的(或者至少不包含导致与预期行为不同的缓存值(。

此外,我假设逻辑运行在正确的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代理上的构建;作业不限于单个代理,每个作业可以在代理上做多件事。。。

最新更新