Linux 使用Jenkins、CMake和pkg配置构建多个项目的首选方法?
我正在开发两个库A和B,其中B依赖于A,它们都在各自的Git存储库中管理。这些库使用CMake构建并安装在标准UNIX目录中。在安装过程中,还安装了一个由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)。在预构建步骤中设置路径不起作用
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。当您使用调试符号编译多个库时,这很容易被超越。