c++ - Cmake 仅包含 header 目标来自仅 header 目标

我正在尝试设置 cmake,以便我可以拥有一个仅依赖于另一个仅 header 库的 header 库。我的目录结构如下所示。

library_a
|_ a.hpp
library_b
|_ b.hpp
library_c
|_ c.hpp
|_ c.cpp

我的 CMakeLists.txt 设置如下

根目录:

add_subdirectory(library_a)
add_subdirectory(library_b)
add_subdirectory(library_c)

library_a目录

add_library(target_a INTERFACE)
target_sources(target_a INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/a.hpp>)
target_include_directories(target_a INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

library_b目录

add_library(target_b INTERFACE)
target_sources(target_b INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/b.hpp>)
target_include_directories(target_b INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_library(target_b INTERFACE target_a)

library_c目录

add_library(target_c STATIC)
target_sources(korc_node_context
               PUBLIC    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/c.cpp>
               INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/c.hpp>)

target_include_directories(target_c INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

target_link_libraries(target_c INTERFACE target_b)

目标library_alibrary_b 实现的通用接口(interface)。最终会有更多的实现。因此,在 c.hpp 中,我包含了 a.hpp header ,并在 c.cpp 中使用了 b.hpp实现。

一切都配置好了,但是当我去编译时,我得到一个错误,找不到a.hpp文件。

如何让 target_link_libraries(target_c INTERFACE target_b) 包含来自 target_a 的 header ?

最佳答案

(正如评论中已经提到的),问题是您的非 header 库目标 target_c 被指定说它的 interface 它的接口(interface)取决于你的header-only-target target_b(并且在target_a上传递),当你的target_c 本身 也(或仅?)取决于 target_b

如果 target_c 的接口(interface)不依赖于 target_a(通过 target_b 传递 - 即 target_c 的用户不需要使用 target_a 接口(interface)中的任何内容),然后在将 target_b 链接到 target_c 时使用 PRIVATE。否则,使用 PUBLIC(PRIVATEINTERFACE 的组合)。

有关详细信息,请参阅 the target_link_libraries() command 的引用文档.

https://stackoverflow.com/questions/55011105/

相关文章:

c# - .NET Core 2 中的 Startup.cs 中的 "IConfiguration

node.js - 如何在 Node js 中使用 Google Hangout 聊天 spaces

javascript - 使 postcss 与 material ui 的 jss 一起工作

php - 如何使用 php 代码在 WHM/Cpanel 中以编程方式创建数据库?

python - 在python中的不规则网格上集成二维数据

reactjs - JEST - 如何使用同一 __test__ 文件夹中的实用程序管理不同的测试文

python - 使用 colorama 更改 Python 输入的文本颜色

javascript - 使用 css 或 html5 的置换贴图

python - 无法导入 python 模块

javascript - Discord.js 机器人,临时静音命令不会静音