首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用jenkins生成32位和64位程序并封装在一个包中

如何使用jenkins生成32位和64位程序并封装在一个包中
EN

Stack Overflow用户
提问于 2020-11-18 11:39:10
回答 1查看 758关注 0票数 0

这是另一次从堆栈溢出寻求帮助的时候。

我试图使用jenkins,我的目标是构建一个包含32位和64位版本的windows安装包。

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

如果使用jenkins,程序将是:

linux服务器(主服务器)的server(agent)

  • agent

  • 发送一个构建请求来结束jenkins的

签出代码,svn

  • 用两个版本的

构建了这个包

我想主程序将需要向代理发送2个请求(或者一个请求触发2个作业以单独构建两个版本,对不起,我是jenkins的新手)。

但是不幸的是,32 ,64位需要不同的CMakeLists.txt,因为它们需要链接到第三方库。(需要在cmakeList中设置第三个库的路径)。

但是svn代码只是一个副本,所以CMakeList.txt将是相同的。(在构建特定版本时,我将以手动方式修改cmakeList )。

所以我不知道该怎么做?

有什么方法可以掉头吗?(创建另一个svn存储库?)

谢谢..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 19:33:15

没有必要使用单独的CMakeLists.txt文件。您可以通过在CMAKE_SIZEOF_VOID_P命令之后检查project()来区分32位和64位版本。这允许您将特定于32/64位的逻辑保持独立。

此外,您可以在通过-D VAR_NAME=value设置cmake时设置缓存变量。

CMakeLists.txt

代码语言:javascript
运行
复制
...

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插件,所以我将使用bat步骤,假设您使用jenkins管道,并假设目录repo包含CMakeLists.txt文件。另外,build64build32应该已经存在并且是干净的(或者至少不包含导致与预期不同行为的缓存值)。

此外,我假设逻辑运行在正确的jenkins节点上,并在那里安装了cmake。

代码语言:javascript
运行
复制
// 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代理上运行构建;作业不限于单个代理,每个作业可以对一个代理执行多件事情……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64892333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档