Generar automáticamente dependencias de archivos de objeto (vinculador) para ejecutables de C / C ++

Actualmente estoy trabajando en un marco de compilación C / C ++ flexible que (con suerte) abriré de código bastante pronto. (veresta pregunta para algunos antecedentes).

Estoy usando el siguiente comando para generar las dependencias de archivo #include para los archivos de fuente / encabezado.

gcc -M -MM -MF

¿Hay alguna manera de inferir inteligentemente las dependencias del enlazador (archivo .o) paraejecutables (Pruebas de unidad + ejecutable principal para la plataforma de destino en mi caso) ¿Utilizando utilidades gcc / GNU de manera similar a la anterior? Actualmente, el marco hace una gran cantidad de suposiciones y es bastante tonto al determinar estas dependencias.

He oído hablar de un enfoque donde elNuevo Méjico El comando se puede utilizar para crear una lista de símbolos no definidos en un archivo de objeto. Por ejemplo, ejecutar nm en un archivo de objeto (compilado usando gcc -c) aparece con algo como esto:

nm -o module.o

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

Uno buscaría otros archivos de objetos donde estos símbolos indefinidosson definido para obtener una lista de dependencias de archivos de objeto necesarias para vincular correctamente el archivo.

¿Se considera esta mejor práctica para determinar las dependencias del enlazador para los ejecutables? ¿Hay alguna otra forma de inferir estas dependencias? Suponga que todos los archivos de objetos ya existen (es decir, ya se han compilado utilizando gcc -c) al proponer su solución.

Respuestas a la pregunta(3)

Su respuesta a la pregunta