【问题标题】:Use includes of adjacent subproject in cmake在 cmake 中使用包含相邻子项目
【发布时间】:2014-01-29 19:27:49
【问题描述】:

我开发了一个由多个共享库组成的项目,并使用 CMake 构建它。 每个库都是通过add_subdirectory() 构建的。

将第一个库的所有API头添加到第二个的CMakeLists.txt中的最佳方法是什么?

【问题讨论】:

  • 这里,我的意思是当我不想链接提供 API 的库时,我只需要获得对标头的访问权限

标签: api include cmake subdirectory


【解决方案1】:

在目标本身中编码包含目录:

http://www.cmake.org/cmake/help/git-master/manual/cmake-buildsystem.7.html#include-directories-and-usage-requirements

该文档是新文档,但 target_include_directories 命令自 CMake 2.8.11 起就存在。与 INTERFACE 或 PUBLIC 选项一起使用。

【讨论】:

    【解决方案2】:

    完成steveire的回答:

    对于导出API的库我们应该写

    target_include_directories("target_with_api" INTERFACE "path_to_api_includes")
    

    对于使用此 API 的库,我们编写

    target_include_directories("api_client_target_name" PRIVATE
                 $<TARGET_PROPERTY:"target_with_api",INTERFACE_INCLUDE_DIRECTORIES>)
    

    $&lt;TARGET_PROPERTY:"target_with_api",INTERFACE_INCLUDE_DIRECTORIES&gt;) 向我们返回通过 API 分配给库的目标属性

    【讨论】:

    • 什么?不!那是错误的。您不需要使用站点上的 target_include_directories。只需使用 target_link_libraries。这会消耗来自指定目标的包含目录。
    • @steveire 对不起,我没有强调它——我不需要链接库,我只需要访问 API 标头。在我的特殊情况下,库是手动加载的
    • ➕1 这在使用“对象库”时特别有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2020-07-17
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2022-07-10
    • 2021-08-05
    相关资源
    最近更新 更多