2010-11-11 25 views
19

En caso de que se modifique un Makefile, una apuesta segura sería considerar que todos los objetivos están desactualizados.Depende del archivo make

¿Existe alguna manera inteligente de agregar esta dependencia? ¿Hay alguna alternativa?

+1

Hice la misma pregunta no hace mucho tiempo: http://stackoverflow.com/questions/3871444/making-all-rules-depend-on-the-makefile-itself – reinierpost

+0

Es extraño que no haya aparecido en una buscar, ni siquiera está relacionado. –

+0

Esto podría no ser suficiente. ¿Qué sucede cuando las variables cambian? (Por ejemplo, puede que necesite hacer un _clean_ entre un 'make CDEFS = debug' y un' make CDEFS = release'.) – bobbogo

Respuesta

6

Una apuesta segura, pero una idea terrible. Ejemplo: estás usando automake y actualiza Makefile.am para agregar un solo archivo fuente. La respuesta correcta es compilar solo el nuevo archivo y vincularlo. En su esquema, todo se reconstruirá.

Por otra parte, la adición de la dependencia no va a hacer nada a menos que toque el archivo, algo así como:

$(SRCS): Makefile 
    touch [email protected] 

Esto luego tropezar a los editores que utilizan el mtime para detectar la modificación concurrente (emacs es uno ejemplo).

Si está haciendo algo importante, simplemente ejecute make clean all después de hacer el cambio.

+0

No consideré que las fuentes no se actualizarían. Pero, ¿y si todos los _targets_ dependen del Makefile? +1 por levantar un buen punto. –

+0

@Matt Joiner: Funcionaría (también debería incluir el cierre transitivo de todos los archivos .mk incluidos), pero aún así tendría una recompilación redundante, la mayoría de las veces. Es mejor no molestarse: entonces tiene compilaciones cortas por defecto y la capacidad de hacer una compilación completa si es necesario. Si lo pones en esto, no tienes manera de hacer la compilación corta si solo has realizado un pequeño ajuste. Sé que haces muchas cosas en C++. ¿No puede sugerir seriamente que el costo de una reconstrucción completa de un proyecto de C++ es menor? –

+0

¿Por qué tendrías que tocar el Makefile? La regla solo se ejecuta si Makefile ya es más nuevo que los archivos del objeto. –

4

Asegúrese de que los archivos de objetos dependen del makefile:

$(OBJFILES) : Makefile 

Dónde Makefile es el nombre del archivo de maquillaje.

+0

Supongo que debo rellenar SRCFILES por mi cuenta? –

+0

Sí. Mi pregunta puede sonar un poco arrogante, pero lo que quería preguntar es qué tipo de propiedades quería de una solución alternativa. No sé de una manera de hacer una dependencia en "cada objetivo". –

Cuestiones relacionadas