Связывание библиотеки с заголовком

У меня есть две библиотеки:

  • 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.


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


person Oussama Ennafii    schedule 01.09.2020    source источник
comment
Вы не ссылаетесь на библиотеки только для заголовков. I used a workaround by adding the source files of a into the definition of c. В библиотеках только для заголовков не должно быть исходных файлов, иначе они будут включены в заголовки. Не нужно их компилировать.   -  person tkausl    schedule 01.09.2020
comment
Это звучит немного странно. Библиотека только для заголовков может действительно иметь зависимости только от других библиотек только для заголовков. В противном случае это не было бы только заголовком.   -  person MSalters    schedule 01.09.2020
comment
Спасибо, @MSalters! Если я хорошо понимаю. Это означает, что либо a должен быть только заголовком, либо мне нужно добавить файл dummy.cpp в b, чтобы он скомпилировался и был связан с a.   -  person Oussama Ennafii    schedule 01.09.2020
comment
@ethiy: я не понимаю, что этот фиктивный файл добавляет к уравнению. Я бы использовал реальные файлы реализации. Файлы, содержащие только заголовки, позволяют избежать сложности компоновки за счет времени компиляции, но у b есть худшее из обоих миров.   -  person MSalters    schedule 01.09.2020