tutorial make instalar español comando gnu-make

instalar - ¿Por qué GNU Make la receta enlatada no funciona?



instalar make en windows 10 (1)

Espero ver los archivos foo1 y foo3 creados por el makefile a continuación. Sin embargo solo se crea un archivo foo3 . A mí me parece que la receta enlatada make-foo simplemente es ignorada por make. El resultado de la depuración de los objetivos foo1 y foo2 (receta vacía) es idéntico.

# why canned recipe doesn''t work ? # http://www.gnu.org/software/make/manual/make.html#Canned-Recipes define make-foo = echo making $@ touch $@ endef .PHONY: all all: foo1 foo2 foo3 # foo1 is not created, but why ? .PHONY: foo1 foo1: $(make-foo) # debug output similar to foo1 .PHONY: foo2 foo2: # this works .PHONY: foo3 foo3: echo making $@ touch $@

Corriendo hacer

xxxx@xxxx:/dev/shm$ make -dRr GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-linux-gnu Reading makefiles... Reading makefile `makefile''... Updating makefiles.... Considering target file `makefile''. Looking for an implicit rule for `makefile''. No implicit rule found for `makefile''. Finished prerequisites of target file `makefile''. No need to remake target `makefile''. Updating goal targets.... Considering target file `all''. File `all'' does not exist. Considering target file `foo1''. File `foo1'' does not exist. Finished prerequisites of target file `foo1''. Must remake target `foo1''. Successfully remade target file `foo1''. Considering target file `foo2''. File `foo2'' does not exist. Finished prerequisites of target file `foo2''. Must remake target `foo2''. Successfully remade target file `foo2''. Considering target file `foo3''. File `foo3'' does not exist. Finished prerequisites of target file `foo3''. Must remake target `foo3''. echo making foo3 Putting child 0x0914c5f0 (foo3) PID 3132 on the chain. Live child 0x0914c5f0 (foo3) PID 3132 making foo3 Reaping winning child 0x0914c5f0 PID 3132 touch foo3 Live child 0x0914c5f0 (foo3) PID 3133 Reaping winning child 0x0914c5f0 PID 3133 Removing child 0x0914c5f0 PID 3133 from chain. Successfully remade target file `foo3''. Finished prerequisites of target file `all''. Must remake target `all''. Successfully remade target file `all''.

Falta foo1 :

xxxx@xxxx:/dev/shm$ ll foo* -rw-r--r-- 1 xxxx xxxx 0 2011-02-17 20:04 foo3


Creo que no quieres el = al final de la línea de define . Este makefile funciona aquí para mí:

define make-foo echo making $@ touch $@ endef .PHONY: foo1 foo1: $(make-foo)

Ejemplo:

$ make echo making foo1 making foo1 touch foo1 $ ls Makefile foo1

El manual de GNU make parece indicar que el = debería estar bien, pero al igual que usted, tengo un comportamiento diferente si lo tengo allí.

Edit: acabo de preguntar:

GNU hace diferencias en declaraciones de variables multilínea

Para obtener una aclaración sobre lo que está pasando aquí ...