Automatycznie generuj zależności plików obiektowych (linker) dla plików wykonywalnych C / C ++

Obecnie pracuję nad elastyczną strukturą kompilacji C / C ++, która wkrótce (mam nadzieję) zostanie otwarta. (widziećto pytanie o jakieś tło).

Używam poniższego polecenia, aby wygenerować zależności pliku #include dla plików źródłowych / nagłówkowych.

gcc -M -MM -MF

Czy istnieje sposób na sprytne wnioskowanie o zależnościach linkera (pliku .o)pliki wykonywalne (testy jednostkowe + główny plik wykonywalny dla platformy docelowej w moim przypadku) przy użyciu narzędzi gcc / GNU w podobny sposób jak powyżej? Obecnie ramy zawierają wiele założeń i są dość głupie w określaniu tych zależności.

Słyszałem o jednym podejściu, w którymnm komenda może być użyta do stworzenia listy niezdefiniowanych symboli w pliku obiektowym. Na przykład uruchomienie nm na pliku obiektowym (skompilowanym przy użyciu gcc -c) wymyśla coś takiego -

nm -o module.o

module.o:         U _undefinedSymbol1
module.o:         U _undefinedSymbol2
module.o:0000386f T _definedSymbol

Następnie można szukać innych plików obiektów, w których te niezdefiniowane symbole zdefiniowane, aby uzyskać listę zależności plików obiektowych wymaganych do pomyślnego połączenia pliku.

Czy jest to najlepsza praktyka w określaniu zależności linkera dla plików wykonywalnych? Czy istnieją inne sposoby wnioskowania o tych zależnościach? Załóżmy, że wszystkie pliki obiektowe już istnieją (tzn. Zostały już skompilowane przy użyciu gcc -c) podczas proponowania rozwiązania.

questionAnswers(3)

yourAnswerToTheQuestion