primer - ¿Qué significa @:(en el símbolo dos puntos) en un Makefile?
makefile linux c (2)
Para los curiosos acerca de por qué puedes hacer esto, es útil si quieres fingir que se hizo algo, para que Make no genere "No hay nada que hacer" para tu objetivo.
Un ejemplo es si tienes un objetivo falso que siempre ejecutas, y en él tienes 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 (de los scripts 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
@:
¿Qué hace lo siguiente en un Makefile?
rule: $(deps)
@:
Parece que no puedo encontrar esto en el manual del fabricante.
Significa "no repetir este comando en la salida". Entonces esta regla dice "ejecutar el comando de shell :
y no repetir el resultado.
Por supuesto, el comando de shell :
es operativo, por lo tanto, esto significa "no hacer nada y no decir nada".
¿Por qué?
El truco aquí es que tienes una combinación oscura de dos sintaxis diferentes. La sintaxis make (1) es el uso de una acción que comienza con @, que simplemente no hace eco al 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 de shell, incluyendo :
La ayuda de Bash explica esto y en cualquier lugar:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.