2012-03-24 21 views
6
  • Utility: NMake
  • Piattaforma: Windows 7

Ho il seguente Makefilenmake aggiungendo alle variabili

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

exec: 
    @echo $(FILE) 

Questo funziona perfettamente bene con make. Ciò genera il seguente errore con nmake

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

Quale potrebbe essere la causa?

senza la linea

FILE += $(shell) *.cpp 

nmake funziona perfettamente bene.

risposta

5

La sintassi += è un'estensione GNU Make che è stata introdotta da Sun nel make di Sun alla fine degli anni '80. Non fa parte della sintassi per lo standard POSIX make o l'originale AT & T make.

Se si utilizzano le estensioni, si viene scoperti quando si passa a un sistema che non li supporta. O devi rielaborare le cose (duro) o attaccare al sistema originale.


Un modo per modificare il file di lavorare con nmake è probabilmente:

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

exec: 
    @echo $(FILE) 

Oppure, dato che la macro shell non è definito, anche:

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

exec: 
    @echo $(FILE) 
2

Invece di

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

è necessario utilizzare

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

La strategia di espansione è diverso da nmake e fare. nmake si espande tutto prima di iniziare a valutare le regole mentre make lo fa solo nei momenti in cui è necessario e poiché questo dà problemi ha le due versioni di espansione come descritto nelle pagine di informazioni.

Personalmente mi piace molto meglio di nmake. E a proposito, usa "jom" invece di "nmake".

+0

È probabile che l'ultima riga porti a un errore di "macro ricorsiva". –

+1

No, non lo è. – Lothar

Problemi correlati