tipos significado que programacion ejemplos definicion declaracion constantes variables makefile

significado - GNU hace diferencias en declaraciones de variables multilínea



que es declaracion de variables (2)

Desde CHANGELOG en 3.82:

* read.c (do_define): Modify to allow assignment tokens (=, :=, etc.) after a define, to create variables with those flavors.

Parece que usar ''='' no es compatible antes de eso en declaraciones definidas

Leí esta pregunta y me sorprendió que no funcionara:

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

Así que lo intenté yo mismo y obtuve los mismos resultados. Aquí hay un archivo MAKE de ejemplo:

define foo bar baz endef define bar = foo baz endef $(info foo: $(foo)) $(info bar: $(bar)) all:

Y aquí está el resultado de ejecutarlo:

$ make foo: bar baz bar: make: Nothing to be done for `all''.

¿Que esta pasando aqui? El manual de GNU make parece indicar que estas dos declaraciones de variables deberían ser las mismas: ¿qué es lo que me falta aquí?

Editar:

Algunas citas del manual al que me refería:

3.7 Cómo hacer Lee un Makefile

define immediate deferred endef define immediate = deferred endef

5.8 Definición de recetas enlatadas

Aquí hay un ejemplo de definición de una receta enlatada:

define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef

6.8 Definición de variables de línea múltiple

... Puede omitir el operador de asignación de variables si lo prefiere. Si se omite, make asume que es ''='' y crea una variable expandida recursivamente ...

Como puede ver, la sección de recetas enlatadas usa explícitamente el caso = . Estoy usando GNU Make 3.81.


Probablemente sea tu versión de make . Probé ese makefile en mi máquina usando make 3.81 en Cygwin y obtuve:

$ make foo: bar baz bar: make: Nothing to be done for `all''.

Probé el mismo archivo make utilizando make 3.82 (compilación nativa de Windows) y obtuve:

C:/>C:/make/make.exe foo: bar baz bar: foo baz make: Nothing to be done for `all''.

Creo que el manual de creación en línea es para v3.82.