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

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

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

gcc -M -MM -MF

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

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

nm -o module.o

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

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

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

7
задан Community 23 May 2017 в 10:09
поделиться