2012-07-26 28 views
2

我正在开发两个库A和B,其中B取决于A,两者都在自己的Git存储库中进行管理。这些库是用CMake构建的,并安装在标准的UNIX目录中。在安装过程中,还会安装.pc文件,供pkg-config使用。库B使用pkg-config来查找库A,因此有必要将库A安装在系统范围内,其中make installPKG_CONFIG_PATH被设置为相应的目录。首选使用Jenkins,CMake和pkg-config构建多个项目的方法?

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

的问题是

  • 我可以采用某种make install库阿?或者,
  • 我可以以某种方式将CMake指向/var/lib/jenkins/jobs/libA/install_dir/lib
  • 有没有更好的方法来建立具有相互依赖库的项目?

回答

1

使用user1013341建议的工件是此问题所需的步骤之一。但要获得它pkg-config工作我们必须做一点点:

  1. 我设置库A的CMakeLists.txt产生一个压缩包有make package_source
  2. 成功构建库A之后,Jenkins创建该压缩包并将其作为工件存储。
  3. 库B使用Copy Artifact Plugin获取压缩包并将其解压缩。里面的压缩档仍有建项目和.pc文件指向库A的
  4. 在接下来的生成步骤的安装位置,我用的是EnvInject Plugin设置PKG_CONFIG_PATHLD_LIBRARY_PATH到未解压库A.
  5. 最后但并非最不重要的是,可以启动正常的CMake构建过程,并根据环境变量选取正确的路径。
2

回答您的问题依次是:

要安装库中 - 您可以配置构建库中的存档库作为构建人工制品的詹金斯工作。然后,建立图书馆B的工作可以在运行开始时从Jenkins下载人工制品 - 例如, http:/// job/libA/lastSuccessfulBuild/artifact/
一旦库B作业已收集库A,它就可以被安装和使用。

配置Cmake - 我对cmake不够了解,所以恐怕我无法回答。

有没有更好的方法 - 可能使用Rake,我们用它来控制具有很多依赖关系的构建链。虽然我不确定如果库A必须在远程机器上构建,它的工作效果如何。如果两个库都建立在同一台机器上,事情可能会更简单。

+0

实际上它们是建立在同一台(远程)机器上的。我想说的是,Jenkins或CMake可能因为权限而不易安装。不幸的是,你的第一个答案真的不能帮助我,因为图书馆B仍然试图通过'pkg-config'找到图书馆A,怎么能在这里“下载”一个神器的帮助? – matthias 2012-07-27 06:24:18

+0

噢,当你说你用jenkins在远程机器上建立库A时,我认为这意味着这两个库建立在不同的机器上。如果您因为权限而无法安装构建库,您是否可以设置chroot来构建?那么你应该能够安装没有权限问题的库,或覆盖生成机器上的其他软件。 – user1013341 2012-07-27 14:53:05

+0

此解决方案不好,因为文档说工件不应该大于100MB。当您使用调试符号编译多个库时,可以轻松超越。 – DBedrenko 2018-02-07 19:55:29