Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Cmake从仅标头目标中包含仅标头目标_C++_Cmake - Fatal编程技术网

C++ 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

我正在尝试设置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
目录

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
的界面。谢谢修复了它。