¿Qué hace lo siguiente en un Makefile?¿Qué significa @: (en el símbolo dos puntos) en un Makefile?
rule: $(deps)
@:
Parece que no puedo encontrarlo en el manual del fabricante.
¿Qué hace lo siguiente en un Makefile?¿Qué significa @: (en el símbolo dos puntos) en un Makefile?
rule: $(deps)
@:
Parece que no puedo encontrarlo en el manual del fabricante.
Significa "no repetir este comando en la salida". Así que esta regla dice "ejecutar el comando de shell :
y no repetir el resultado.
Por supuesto, el comando de shell :
no funciona, por lo que esto significa" no hacer nada y no decir ".
¿Por qué?
el truco aquí es que usted tiene una combinación oscura de dos sintaxis diferentes. el make (1) sintaxis es la utilización de una acción comenzando con @, que es simplemente no repetir el comando. Entonces, una regla como
always:
@echo this always happens
no emitirá
echo this always happens
this always happens
Ahora, la parte de acción de una regla puede ser cualquier comando cáscara, incluyendo :
. ayuda Bash explica esto, así como en cualquier lugar:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
Para los curiosos acerca de por qué es posible hacer esto, es útil si se quiere pretender que algo se ha hecho, por lo que hacen que no da salida "No hay nada que sea hecho para "su objetivo".
Un ejemplo es si tiene un destino falso que ejecuta siempre, y en él tiene un montón de condicionales en el comando. Desea tener al menos algo en caso de que esas condiciones sean falsas y no se haga nada.
Por ejemplo (a partir de secuencias de comandos de Linux/Makefile.clean):
__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
+$(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
+$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
+$(clean-rule)
endif
@:
¡Ah, ja, eso es todo! –
gracias, ¿hay alguna parte que describe esto con más detalle? No estoy seguro de qué es el "out-ut". – cdwilson
No te burles de mi tipeo, serás viejo algún día también. –
¡Gracias, eso fue realmente útil! Hasta que leí tu respuesta, estaba pensando que '@:' era un makeism gracioso (no me di cuenta de que era una combinación de dos cosas ...) – cdwilson