Hay tres usos no relacionados de @
aquí.
En $@
, el carácter @
es el nombre de una variable automática que se puede usar en una regla. El valor de esa variable es el objetivo que está construyendo la regla.
Cuando @
se usa al comienzo de una línea de receta (comando), justo después del carácter de tabulación, hace que el comando no se imprima cuando está a punto de ejecutarse.
El personaje en @
otro lugar no es especial.
Por lo tanto, en su ejemplo, para construir program
:
- La
file
función se invoca. Escribe las dependencias del destino ( $^
variable automática) en el archivo program.in
.
Cualquier comando almacenado en la variable CMD
se ejecuta, con los parámetros almacenados en la variable CMDFLAGS
, más el parámetro adicional @program.in
. Lo que esto hace depende de lo que CMD
sea.
El comando rm program.in
se ejecuta, sin imprimirlo primero.
Algunos comandos tratan un parámetro que comienza con la @
indicación de un archivo desde el cual leer más parámetros. Esta es una convención de DOS que surgió porque DOS tenía un límite estricto en la longitud de la línea de comando y no había forma de interpolar la salida de un comando en una línea de comando. Es poco común en el mundo de Unix ya que Unix no tiene estas limitaciones. Por lo tanto, el efecto de la receta es probablemente el mismo que
$(CMD) $(CMDFLAGS) $(OBJECTS)
>$@.in
se usa como modo de archivo ... pero es útil a su manera ... gracias cuonglm ...