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 symbolesą 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.