Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用jenkins构建32位和64位程序并封装在一个包中_C++_Windows_Jenkins_Cmake_Compilation - Fatal编程技术网

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

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

这是另一个向堆栈溢出寻求帮助的时间

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

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

如果使用jenkins,程序将为:

  • linux jenkins服务器(主服务器)向windowns jenkins服务器(代理)发送生成请求
  • 来自svn的代理签出代码
  • 用2个版本构建包
  • 我猜主机需要向代理发送两个请求(或者一个请求触发两个作业以分别构建两个版本,对不起,我对jenkins不熟悉)

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

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

    所以我不知道怎么做

    有办法扭转局面吗?(创建另一个svn存储库?)


    谢谢…

    不需要使用单独的
    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反模式。