Jak określić zależność biblioteki wprowadzoną przez plik nagłówkowy
Załóżmy, że w projekcie CMake mam źródło wbudowane w bibliotekę
// a.cpp
void f() { /* some code*/ }
I mam nagłówek
// b.h
void f();
struct X { void g() { f(); } };
Mam inny plik:
// main.cpp
#include "b.h"
int main() { X x; x.g(); }
CMakeLists.txt zawiera:
add_library(A a.cpp)
add_executable(main main.cpp)
target_link_libraries(main A)
Teraz spójrz na ostatnią linię CMakeLists.txt: Muszę określić A jako zależności bezpośrednio od głównego. Zasadniczo muszę określić takie zależności dla każdego źródła, które zawiera b.h. Ponieważ dołączenia mogą być pośrednie i przejść przez cały łańcuch włączeń. Na przykład a.cpp wywołuje funkcję inline klasy ch, która w wywołaniach wywołuje funkcję w dh, itd., A na końcu wywołuje funkcję z biblioteki A. Jeśli bh jest dołączone przez pliki partii, ręczne wykrycie wszystkich takich zależności nie jest możliwe dla duże projekty.
Więc moje pytanie brzmi: czy i tak należy określić, że dla każdego pliku źródłowego, który bezpośrednio lub pośrednio zawiera nagłówek, musi się on łączyć z pewną biblioteką?
Dzięki.