Gerar automaticamente dependências de arquivo de objeto (vinculador) para executáveis ​​C / C ++

No momento, estou trabalhando em uma estrutura flexível de compilação C / C ++ que eu (espero) abrirá o código em breve. (Vejoisto pergunta para algum fundo).

Eu estou usando o comando abaixo para gerar as dependências do arquivo #include para arquivos de origem / cabeçalho.

gcc -M -MM -MF

Existe uma maneira de inferir habilmente as dependências do linker (.o file) paraexecutáveis (testes de unidade + executável principal para plataforma de destino no meu caso) usando utilitários gcc / GNU de forma semelhante ao acima? Atualmente, o framework faz um monte de suposições e é bastante burro na determinação dessas dependências.

Eu ouvi falar de uma abordagem em que onm comando pode ser usado para chegar a uma lista de símbolos indefinidos em um arquivo de objeto. Por exemplo, executar o nm em um arquivo de objeto (compilado usando gcc -c) aparece com algo assim -

nm -o module.o

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

Seria então procurar por outros arquivos de objeto onde esses símbolos indefinidosestá definido para criar uma lista de dependências do arquivo de objeto necessárias para vincular o arquivo com êxito.

Essa é considerada a melhor prática para determinar as dependências do vinculador para executáveis? Existem outras maneiras de inferir essas dependências? Suponha que todos os arquivos de objeto já existam (isto é, já foram compilados usando gcc -c) ao propor sua solução.

questionAnswers(3)

yourAnswerToTheQuestion