C++ Cmake从仅标头目标中包含仅标头目标
我正在尝试设置cmake,这样我就可以拥有一个只依赖于另一个只依赖于头的库的只依赖于头的库。我的目录结构如下所示C++ Cmake从仅标头目标中包含仅标头目标,c++,cmake,C++,Cmake,我正在尝试设置cmake,这样我就可以拥有一个只依赖于另一个只依赖于头的库的只依赖于头的库。我的目录结构如下所示 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\u a目录 ad
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\u 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}>)
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)
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\u c
目录
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}>)
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)
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)
add_库(target_c STATIC)
目标\u源(korc\u节点\u上下文
公开的$
接口$)
目标包含目录(目标c接口$)
目标链接库(目标c接口目标b)
目标
library\u a
是library\u b
实现的通用接口。最终会有更多的实现。因此,在c.hpp
中,我包括a.hpp
标题,并在c.cpp
实现中使用b.hpp
。所有配置都很好,但是当我开始编译时,我得到一个错误,a.hpp
文件找不到。如何获取target\u link\u库(target\u c INTERFACE target\u b)
以包含target\u a
中的标题?您为什么选择INTERFACE
?应该是PUBLIC
。哪个界面应该是PUBLIC
?最后一个链接target\u b
到target\u c
的界面。谢谢修复了它。