Pregunta

Usamos GNU Make para nuestro sistema. Al final de nuestros makefiles, tenemos una inclusión llamada Makedepends que genera un montón de archivos .d usando el interruptor -MM en gcc. Luego incluimos el archivo .d para cada archivo .cc usando una línea include $ (CXXFILES: .cc = .d). Pero cuando borramos un archivo o movemos archivos, el paso de las dependencias se rompe y tenemos que eliminar manualmente los archivos .d (incluso una limpieza no funciona porque las dependencias fallan)

¿Hay una manera de generar estos archivos .d de dependencia o incluir estos archivos .d de dependencia que manejen con gracia la eliminación o reubicación de un archivo?

EDITAR: Por ejemplo: tengo serial.cc y los makefiles generan un archivo serial.d que tiene una dependencia de buffer.h pero luego lo cambio, así que ya no necesito buffer.h y elimino el buffer .h. La próxima vez que ejecute make, se ahogará porque incluye el archivo .d que aún hace que serial.o dependa de buffer.h.

¿Fue útil?

Solución

http://make.mad-scientist.net/papers / advanced-auto-dependency-generation tiene una descripción de este problema exacto y un par de formas de solucionarlo. El primero es un poco equivocado, pero el " avanzado " es esencialmente la mancha en.

Otros consejos

Dos posibilidades:

Primero, ¿puede agregar una regla a su Makefile para ejecutar el paso de dependencia:

.SUFFIXES: .d

%.d::
   makedepend_command_here

Si no, en la página Last Resort de la página info para GNU Make:

  

Por ejemplo, cuando se prueba una   makefile, puede que no te importe si el   Los archivos fuente contienen datos reales, solo   que existen Entonces podrias hacer   esto:

 %::
         touch $@
     

para causar todos los archivos de origen necesarios   (como requisitos previos) para ser creado   automáticamente.

¿Esto funcionará para crear archivos .d vacíos para ti?

Si usa makepp con la opción --rm-stale , notará los archivos que ya no son compilables y los eliminará. Si este es un caso de uso normal para usted, puede colocar esa opción en .makepprc en la raíz de su árbol de compilación, y siempre se utilizará.

Pero, por supuesto, makepp maneja toda esta detección de dependencia en sí misma, por lo que no necesita desordenar su makefile. Es incluso mejor que su enfoque, ya que puede generar los encabezados necesarios a tiempo para que el compilador retome, donde gcc -MM fallaría.

Hay mucho más para makepp. Además de hacer casi todo lo que puede hacer GNU, hay muchas cosas más útiles, e incluso puedes extender tus archivos make con algunos programas de Perl.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top