Cmake - 包含多个项目的图书馆

时间:2017-09-24 21:25:14

标签: c++ cmake

在我的团队中,我们使用C ++作为主要语言制作了一些应用程序,当一个新项目到来时,我们总是在需要时复制粘贴其他项目的文件。这很频繁,我们进行了讨论以改进。

因此,为了改变这种情况,我们决定创建一个独特的库(或许多小库),其中包含不属于业务本身的所有内容。我们决定使用cmake。

但是,我的问题是,是否有一种方法可以导入这个库或这些小库,而无需在每次提交更改时编译它们。

例如,如果我们有两个库和两个项目,其中:

  1. 项目A取决于 - >图书馆A和图书馆B
  2. 项目B取决于 - >仅限图书馆B
  3. 拥有我们的源目录:

    • LIB A.
      • 包括
      • SRC
      • 的CMakeLists.txt
    • LIB B.
      • 包括
      • SRC
      • 的CMakeLists.txt
    • 项目A.
      • 包括
      • SRC
      • 的CMakeLists.txt
    • 项目B.
      • 包括
      • SRC
      • 的CMakeLists.txt

    如何在项目A和B中设置CmakeLists,这样,当我们更改库A或B中的某些内容,然后重新运行cmake然后在项目B中生成时,所有更改都会显示在其中。对于另一个项目也一样吗?。

    有可能吗?

1 个答案:

答案 0 :(得分:0)

我在处理某个个人项目时遇到了同样的问题。

我可以提供一些建议,其中一些建议使用您解决问题的方法,其中一些建议没有:

方法1(不同的方法,多个源控制存储库)

不要使用不同的CMake文件拆分代码。 相反,使用单个CMake文件并将代码库拆分为较小的存储库。

例如,所有共享实用程序库都可以是单个存储库,而应用程序A和B则分别获取存储库。 (您当然可以将实用程序库拆分为多个存储库)。

这确保您不必一次保持/更新/使用所有项目,而只需要实际需要的项目。唯一的缺点是,你对签出这些项目的方式有所限制,但我不认为这是一个问题。

方法2(使用CMake的add_dependencies的方法相同)

您可以在应用程序A和B的编译中定义依赖关系,以便在更新相关库时自动构建它们。

以下是CMake add_dependencies手册的链接。