2012-03-24 8 views
6
  • : nmake
  • Plataforma: Windows 7

he Makefilenmake añadiendo a las variables de utilidad

FILE = $(shell) *.c 
FILE += $(shell) *.cpp 

exec: 
    @echo $(FILE) 

siguiente Esto funciona perfectamente bien con maquillaje. Esto arroja el siguiente error con nmake

makefile(2) : fatal error U1036: syntax error : too many names to left of '=' 
Stop. 

¿Cuál podría ser el motivo?

Sin la línea

FILE += $(shell) *.cpp 

nmake funciona perfectamente bien.

Respuesta

5

La sintaxis += es una extensión GNU Make que fue pionera en Sun's make a finales de los años 80. No es parte de la sintaxis para el estándar POSIX make, o el original AT & T make.

Si usa extensiones, queda atrapado cuando cambia a un sistema que no las admite. Ya sea que tenga que volver a trabajar las cosas (difícil) o seguir con el sistema original.


Una forma de modificar el archivo para trabajar con nmake es probablemente:

FILE1 = $(shell) *.c 
FILE2 = $(shell) *.cpp 
FILE = $(FILE1) $(FILE2) 

exec: 
    @echo $(FILE) 

O, dado que la macro shell no está definido, incluso:

FILE1 = *.c 
FILE2 = *.cpp 
FILE = $(FILE1) $(FILE2) 

exec: 
    @echo $(FILE) 
2

En lugar de

FILE = $(shell) *.c 
FILE += $(shell) *.cpp 

debe utilizar

FILE = $(shell) *.c 
FILE = $(shell) *.cpp $(FILE) 

La estrategia de expansión es diferente de nmake y hacer. nmake amplía todo antes de comenzar a evaluar las reglas, mientras que make lo hace solo en los momentos necesarios y, dado que esto da problemas, tiene los dos tipos de expansión que se describen en las páginas de información.

Personalmente me gusta más la forma de nmake. Y, por cierto, use "jom" en lugar de "nmake".

+0

La última línea probablemente genere un error de "macro recursiva". –

+1

No, no es así. – Lothar

Cuestiones relacionadas