C++ 仅将库链接到一个标题

C++ 仅将库链接到一个标题,c++,cmake,linker-errors,header-only,C++,Cmake,Linker Errors,Header Only,我有两个图书馆: a b:依赖于a的仅标题库 我不确定是否可以将b链接到a。 如果是,我怎么做 事实上,我还有第三个库c,它依赖于这两个库。此CMake脚本不起作用: [...] add_library(a ${a_SRC}) target_link_libraries(a CONAN_PKG::<foo>) add_library(b INTERFACE) target_sources(b INTERFACE ${b_SRC}) target_include_directo

我有两个图书馆:

  • a
  • b
    :依赖于
    a
    的仅标题库
我不确定是否可以将
b
链接到
a
。 如果是,我怎么做

事实上,我还有第三个库
c
,它依赖于这两个库。此CMake脚本不起作用:

[...]

add_library(a ${a_SRC})
target_link_libraries(a CONAN_PKG::<foo>)

add_library(b INTERFACE)
target_sources(b INTERFACE ${b_SRC})
target_include_directories(b INTERFACE "${PROJECT_SOURCE_DIR}/src/include/b/")
target_link_libraries(b INTERFACE a) # This has no effect, I think!

add_executable(c ${c_SRC})
target_link_libraries(c b a)


您不能链接到仅标题库
我使用了一种变通方法,将a的源文件添加到c的定义中。
仅标题库不应包含源文件,否则,它们将包含在标题中。不用编译,听起来有点怪。仅标头库实际上只能依赖于其他仅标头库。否则它就不会是“仅标题”。谢谢,@MSalters!如果我理解得好的话。这意味着,
a
必须仅为头文件,或者我需要向
b
添加一个dummy.cpp文件,以便它“编译”并与
a
@ethiy链接:我看不出这个dummy文件给等式增加了什么。我会使用真正的实现文件。仅头文件避免了以编译时间为代价的链接复杂性,但b是两个世界中最糟糕的。

[...]
add_executable(c ${c_SRC} ${a_SRC})
[...]