2

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

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

问题是

  • 我可以以某种方式make install图书馆A吗?或者,
  • 我可以以某种方式指向 CMake/var/lib/jenkins/jobs/libA/install_dir/lib吗?
  • 有没有更好的方法来构建具有相互依赖的库的项目?
4

2 回答 2

2

按顺序回答您的问题:

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

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

有没有更好的方法 - 可能使用 Rake,我们使用它来控制具有大量依赖项的构建链。虽然我不确定如果必须在远程机器上构建库 A,它会如何工作。如果两个库都构建在同一台机器上,事情可能更容易管理。

于 2012-07-26T16:56:22.150 回答
1

正如 user1013341 所建议的那样,使用工件是解决此问题所需的步骤之一。但要让它工作,pkg-config我们必须做更多的事情:

  1. 我设置库 ACMakeLists.txt以生成带有make package_source.
  2. 成功构建库 A 后,Jenkins 创建此 tarball 并将其存储为工件。
  3. 库 B 使用Copy Artifact Plugin获取 tarball 并解压缩它。在 tarball 里面仍然有构建的项目和.pc指向库 A 安装位置的文件。
  4. 在下一个构建步骤中,我使用EnvInject 插件PKG_CONFIG_PATH和设置为未解压缩LD_LIBRARY_PATH的库 A。
  5. 最后但同样重要的是,可以启动正常的 CMake 构建过程,并根据环境变量选择正确的路径。
于 2012-08-10T19:58:21.123 回答