Existem três usos não relacionados @
aqui.
Em $@
, o caractere @
é o nome de uma variável automática que pode ser usada em uma regra. O valor dessa variável é o destino que a regra está construindo.
Quando @
é usado no início de uma linha de receita (comando), logo após o caractere de tabulação, faz com que o comando não seja impresso quando estiver prestes a ser executado.
O personagem em @
outro lugar não é especial.
Assim, no seu exemplo, para criar program
:
- A
file
função é chamada. Ele grava as dependências do destino ( $^
variável automática) no arquivo program.in
.
Qualquer comando armazenado na variável CMD
é executado, com os parâmetros armazenados na variável CMDFLAGS
, mais o parâmetro extra @program.in
. O que isso faz depende do que CMD
é.
O comando rm program.in
é executado, sem imprimi-lo primeiro.
Alguns comandos tratam um parâmetro começando com @
como indicando um arquivo para ler mais parâmetros. Essa é uma convenção do DOS que surgiu porque o DOS tinha um limite estrito no comprimento da linha de comando e não havia como interpolar a saída de um comando em uma linha de comando. É incomum no mundo Unix, pois o Unix não possui essas limitações. O efeito da receita é provavelmente o mesmo que
$(CMD) $(CMDFLAGS) $(OBJECTS)
>$@.in
é usado como um modo de arquivo ... mas é útil em sua própria maneira .. obrigado cuonglm ...