【问题标题】:Build Project Tree in CMake在 CMake 中构建项目树
【发布时间】:2014-10-03 23:17:24
【问题描述】:

我想这很简单,没有人会费心把它写下来,但我想不通。让我们考虑一个简单的例子。

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 中更改某些内容时,所有相关目标都应该检测到它。

【问题讨论】:

    标签: cmake


    【解决方案1】:

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

    target_link_libraries 页面底部的示例也很有用,该示例描述了 Library1 和 Library2 相互依赖并且(大多数流行的)链接器要求在链接命令,第一次在另一个库之前,第二次在另一个库之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多