在CMake中构建项目树

时间:2014-10-03 14:30:29

标签: cmake

我认为这很简单,没有人愿意把它写下来,但我无法弄清楚。让我们考虑一个微不足道的例子。

ProjectTree
  |- CMakeLists.txt
  |- Library1
  |    |- CMakeLists.txt
  |    |- src
  |    |- include
  |- Library2 # depends on Library1
  |    |- CMakeLists.txt
  |    |- src
  |    |- include
  |- Program1 # depends on Library2 (not directly on Library1)
  |    |- CMakeLists.txt
  |    |- src
  |- Program2 # depends on Library2 (not directly on Library1)
  |    |- CMakeLists.txt
       |- src

如何使用CMake 3进行更大规模的构建(我们有大约20个库)?我需要请求构建Program1并更新Program1,Library1和Library2,因为它们相互依赖。然后请求构建Program2,而不是再次编译Library1和Library2。此外,当我在Library1中更改某些内容时,所有依赖目标都应该检测它。

1 个答案:

答案 0 :(得分:3)

在Library2 / CMakeLists.txt中使用target_link_libraries(Library2 Library1),然后在Program1 / CMakeLists.txt中使用target_link_libraries(Program1 Library2)。由于您对Library2所描述的依赖性,库1将自动链接到Program1。您可能还需要使用target_include_directories(请参阅文档页面底部的示例)来描述包含目录的每个库,这些目录应该是"导出的"即添加到使用特定库的代码的include目录中,而不是库本身。

您可能还会在target_link_libraries页面底部找到有用的示例,其中描述了Library1和Library2相互依赖的情况,并且(大多数流行的)链接器要求其中一个库被指定两次在link命令中,第一次在另一个库之前,第二次在另一个库之后。