Как указать библиотечную зависимость, представленную заголовочным файлом
Предположим, в проекте CMake у меня есть источник, который встроен в библиотеку
// a.cpp
void f() { /* some code*/ }
И у меня есть заголовок
// b.h
void f();
struct X { void g() { f(); } };
У меня есть другой файл:
// main.cpp
#include "b.h"
int main() { X x; x.g(); }
CMakeLists.txt содержит:
add_library(A a.cpp)
add_executable(main main.cpp)
target_link_libraries(main A)
Теперь посмотрим на последнюю строку CMakeLists.txt: мне нужно явно указать A как зависимости main. По сути, мне нужно указать такие зависимости для каждого источника, который включает в себя b.h. Поскольку включения могут быть косвенными и проходить через цепочку включений. Например, a.cpp вызывает встроенную функцию класса ch, которая, в свою очередь, вызывает функцию из dh и т. Д. И, наконец, вызывает функцию из библиотеки A. Если bh включен в файлы lot, то вручную найти все такие зависимости невозможно крупные проекты.
Поэтому мой вопрос заключается в том, можно ли в любом случае указать, что для каждого исходного файла, который прямо или косвенно включает заголовок, необходимо связать его с определенной библиотекой?
Благодарю.