Como especificar a dependência de biblioteca introduzida pelo arquivo de cabeçalho

Suponha que em um projeto CMake, eu tenho uma fonte que é construída em uma biblioteca

// a.cpp
void f() { /* some code*/ }

E eu tenho um cabeçalho

// b.h
void f();
struct X { void g() { f(); } };

Eu tenho outro arquivo:

// main.cpp
#include "b.h"
int main() { X x; x.g(); }

O CMakeLists.txt contém:

add_library(A a.cpp)
add_executable(main main.cpp)
target_link_libraries(main A)

Agora olhe para a última linha do CMakeLists.txt: Eu preciso especificar A como as dependências do principal explicitamente. Basicamente, eu preciso especificar essas dependências para cada fonte que inclua b.h. Já as inclusões podem ser indiretas e percorrer todo o caminho através de uma cadeia de inclusões. Por exemplo, a.cpp chama uma classe de função inline de ch, que por sua vez chama a função em dh, etc, e finalmente chama a função da biblioteca A. Se bh é incluído por arquivos de lotes, descobrir manualmente todas essas dependências não é viável para grandes projetos.

Então, a minha pergunta é, existe alguma maneira de especificar que, para cada arquivo de origem que direta ou indiretamente inclui um cabeçalho, ele precisa vincular-se a determinada biblioteca?

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion