.PHONY todas as regras no GNU fazem o arquivo?

11

Estou errado na minha interpretação de que devo basicamente colocar em primeiro lugar antes de todas as regras:

.PHONY: all of my rules

all:
    echo "Executing all ..."

of:
    echo "Executing of ..."

my:
    echo "Executing my ..."

rules:
    echo "Executing rules ..."

Existe algum caso em que você não queira seguir esta 'fórmula'?

link

    
por tarabyte 21.07.2015 / 05:50

2 respostas

18

Guia de estilo Makefile do Clark Grubb recomenda:

  • All phony targets should be declared by making them prerequisites of .PHONY.
  • add each phony target as a prerequisite of .PHONY immediately before the target declaration, rather than listing all the phony targets in a single place.
  • No file targets should be prerequisites of .PHONY.
  • phony targets should not be prerequisites of file targets.

Para o seu exemplo, isso significaria:

.PHONY: all
all:
    echo "Executing all ..."

.PHONY: of
of:
    echo "Executing of ..."

.PHONY: my
my:
    echo "Executing my ..."

.PHONY: rules
rules:
    echo "Executing rules ..."

Vários alvos PHONY são permitidos; veja também esta pergunta do Stack Overflow: " É possível ter vários destinos .PHONY em um makefile do gnu? "

Além disso, embora isso não seja mencionado diretamente na sua pergunta, deve-se tomar cuidado para não ter um PHONY de destino com o mesmo nome de uma entrada real ou arquivos intermediários em seu projeto. Por exemplo, se o seu projeto tiver hipoteticamente um arquivo de código-fonte denominado rules (sem sufixo), a inclusão dessa sequência em um PHONY de destino poderá interromper o comportamento make esperado.

    
por 21.07.2015 / 07:58
2

Eu acho que é uma boa prática seguir, mas fragmentá-lo e colocar os fragmentos mesmo depois que as receitas de regras completas funcionarem também no meu gmake (3.81):

Por exemplo:

#Makefile
all:
   @echo hello world
.PHONY: all

CMD:

$ touch all
$ make all    #this would be a no-op if all weren't a phoney target
  hello world 
    
por 21.07.2015 / 08:08

Tags