Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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
Linux 使用Jenkins、CMake和pkg配置构建多个项目的首选方法?_Linux_Jenkins_Cmake_Pkg Config - Fatal编程技术网

Linux 使用Jenkins、CMake和pkg配置构建多个项目的首选方法?

Linux 使用Jenkins、CMake和pkg配置构建多个项目的首选方法?,linux,jenkins,cmake,pkg-config,Linux,Jenkins,Cmake,Pkg Config,我正在开发两个库A和B,其中B依赖于A,它们都在各自的Git存储库中管理。这些库使用CMake构建并安装在标准UNIX目录中。在安装过程中,还安装了一个由pkg config使用的.pc文件。库B使用pkg config查找库A,因此有必要在系统范围内使用make install安装库A,或者将pkg\u config\u路径设置为适当的目录 现在,我使用Jenkins在远程机器上构建库。不幸的是,无法生成库B,因为不满足依赖关系(pkg config找不到库A)。在预构建步骤中设置路径不起作用

我正在开发两个库A和B,其中B依赖于A,它们都在各自的Git存储库中管理。这些库使用CMake构建并安装在标准UNIX目录中。在安装过程中,还安装了一个由
pkg config
使用的
.pc
文件。库B使用
pkg config
查找库A,因此有必要在系统范围内使用
make install
安装库A,或者将
pkg\u config\u路径设置为适当的目录

现在,我使用Jenkins在远程机器上构建库。不幸的是,无法生成库B,因为不满足依赖关系(
pkg config
找不到库A)。在预构建步骤中设置路径不起作用,因为命令在其自身的shell中运行

问题是

  • 我是否可以
    使安装
    库成为一个库?或者
  • 我是否可以将CMake指向
    /var/lib/jenkins/jobs/libA/install\u dir/lib
  • 有没有更好的方法来构建具有相互依赖库的项目

按顺序回答您的问题:

要使安装库成为A—您可以将构建库A的Jenkins作业配置为将库归档为构建工件。然后,构建库B的作业可以在运行开始时从Jenkins下载人工制品–例如。http:///job/libA/lastSuccessfulBuild/artifact/
一旦库B作业收集了库A,就可以安装并使用它

配置Cmake–我对Cmake了解不够,因此我恐怕无法回答这个问题


有没有更好的方法——可能是使用Rake,我们使用它来控制具有大量依赖项的构建链。虽然我不确定如果库A必须建立在远程机器上,它会工作得多好。如果两个库都构建在同一台机器上,那么管理起来可能会更简单。

按照user1013341的建议,使用工件是解决此问题所需的步骤之一。但要使其与
pkg config
配合使用,我们还需要做更多的工作:

  • 我设置库A的
    CMakeLists.txt
    以生成一个带有
    make package\u source
    的tarball
  • 在成功构建库a之后,Jenkins创建了这个tarball并将其作为工件存储
  • 库B使用获取柏油球并将其解绑。在tarball内部仍然有一个构建的项目和指向库A的安装位置的
    .pc
    文件
  • 在下一个构建步骤中,我使用将
    PKG\u CONFIG\u路径
    LD\u LIBRARY\u路径
    设置为未修改的库A
  • 最后但并非最不重要的一点是,可以启动正常的CMake构建过程,并根据环境变量选择正确的路径

  • 实际上,它们构建在同一台(远程)机器上。我想说的是,Jenkins或CMake可能因为权限问题而无法轻松安装。不幸的是,你的第一个答案真的帮不上我的忙,因为库B仍然试图通过
    pkg config
    找到库A,那么“下载”工件在这里又有什么帮助呢?哦,好吧,当你说你使用jenkins在远程机器上构建库A时,我假设这意味着这两个库是在不同的机器上构建的。如果由于权限问题而在安装生成库时遇到问题,是否可以将chroot设置为内置?然后,您应该能够在没有权限问题的情况下安装库,或者在生成计算机上覆盖其他软件。这种解决方案很糟糕,因为文档中说工件不应该大于100MB。当您使用调试符号编译多个库时,这很容易被超越。