使用Jenkins,CMake和pkg-config构建多个项目的首选方法?

时间:2012-07-26 15:43:39

标签: linux jenkins cmake pkg-config

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

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

问题是

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

2 个答案:

答案 0 :(得分:2)

按顺序回答您的问题:

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

配置Cmake - 我对cmake知之甚少,所以我恐怕无法回答这个问题。

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

答案 1 :(得分:1)

使用工件,如user1013341所示,是此问题所需的步骤之一。但为了让它与pkg-config一起工作,我们还需要做更多的事情:

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