我正在尝试设置 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_a
是library_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
(PRIVATE
和 INTERFACE
的组合)。
有关详细信息,请参阅 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 输入的文本颜色