Автоматически генерировать зависимости объектного файла (компоновщика) для исполняемых файлов C / C ++

В настоящее время я работаю над гибкой средой сборки C / C ++, которую (надеюсь) скоро открою. (увидетьэтот вопрос для некоторого фона).

Я использую приведенную ниже команду для генерации зависимостей файла #include для файлов исходного кода / заголовка.

gcc -M -MM -MF

Есть ли способ умело выводить зависимости компоновщика (.o файл) дляexecutables (модульные тесты + основной исполняемый файл для целевой платформы в моем случае) с использованием утилит gcc / GNU аналогично описанному выше? В настоящее время структура делает много предположений и довольно глупа в определении этих зависимостей.

Я слышал об одном подходе, гдеnm Команда может быть использована для создания списка неопределенных символов в объектном файле. Например, при запуске nm в объектном файле (скомпилированном с помощью gcc -c) получается что-то вроде этого -

nm -o module.o

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

Затем можно было бы искать другие объектные файлы, где эти неопределенные символыare определено для составления списка зависимостей объектных файлов, необходимых для успешного связывания файла.

Считается ли это наилучшей практикой при определении зависимостей компоновщика для исполняемых файлов? Есть ли другие способы вывести эти зависимости? Предположим, что все объектные файлы уже существуют (т.е. уже скомпилированы с использованием gcc -c) при предложении вашего решения.

Ответы на вопрос(3)

Ваш ответ на вопрос