makefile - how - GNU Make: advertencia: ignorar los viejos comandos para el objetivo `xxx ''
makefile structure (1)
¿Podría ayudarme a comprender cómo GNU Make (versión 3.81) procesa Makefile simple? Aquí está el archivo:
.PHONY: a b c e f
a : b c
@echo "> a(b,c)"
e : a
@echo "> e(a)"
e : f
@echo "> e(f)"
f :
@echo "> f()"
b :
@echo "> b()"
c :
@echo "> c()"
Ahora ejecuto el comando
make e
para construir el objetivo ''e''. La salida de Make se ve así:
Makefile:7: warning: overriding commands for target `e''
Makefile:5: warning: ignoring old commands for target `e''
> f()
> b()
> c()
> a(b,c)
> e(f)
http://www.gnu.org/software/make/manual/html_node/Error-Messages.html da la siguiente explicación:
''advertencia: anulación de receta para el objetivo'' xxx ''''
''advertencia: ignorar la receta anterior para el objetivo `xxx'' ''
La creación de GNU permite que solo se especifique una receta por objetivo (a excepción de las reglas de dos puntos). Si le da una receta para un objetivo que ya se ha definido que tiene uno, se emite esta advertencia y la segunda receta sobrescribirá la primera .
Pero a partir de la salida, podemos ver que también se ejecutan los comandos para construir el objetivo ''a''. Pensé que según la descripción en la página ''Error-Messages'', mientras procesaba este Makefile e intentaba construir ''e'' target (make e), en primer lugar debería decidir que ''e'' depende de ''a'' y luego sobrescribirlo a ''e'' depende de ''f''. Y la salida debería verse así:
Makefile:7: warning: overriding commands for target `e''
Makefile:5: warning: ignoring old commands for target `e''
> f()
> e(f)
Pero parece que aún recuerdo que ''e'' depende de ''a'' y no sobrescribe ninguna receta.
Por favor, ayúdame a entender este comportamiento. ¿Por qué se siguen ejecutando comandos para construir un objetivo ''a'', incluso después de sobrescribir la receta?
Las dependencias son distintas de los comandos. La dependencia de a
no se olvida, pero los comandos sí.