2012-03-24 7 views
6
  • Utility: NMake
  • Платформа: Windows 7

У меня есть следующие MakefileNMAKE добавления к переменным

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

exec: 
    @echo $(FILE) 

Это отлично работает с производства. Это вызывает следующую ошибку с nmake

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

В чем причина?

Без линии

FILE += $(shell) *.cpp 

NMAKE работает прекрасно.

ответ

5

Синтаксис += является расширением GNU Make, который был впервые применен в Sun's make в конце 80-х годов. Он не является частью синтаксиса стандарта POSIX make или оригиналом AT & T make.

Если вы используете расширения, вы попадаете при переключении на систему, которая их не поддерживает. Вы либо должны переделывать вещи (жестко), либо придерживаться исходной системы.


Один из способов изменить файл для работы с nmake вероятно:

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

exec: 
    @echo $(FILE) 

Или, учитывая, что макрос shell не определен, даже:

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

exec: 
    @echo $(FILE) 
2

Вместо

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

вы должны использовать

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

Стратегия расширения отличается от NMAKE и сделать. nmake расширяет все, прежде чем начинать оценивать правила, а make делает это только в разы, когда это необходимо, и поскольку это дает проблемы, у него есть два варианта расширения, как описано на информационных страницах.

Мне лично нравится путь nmake лучше. И, кстати, используйте «jom» вместо «nmake».

+0

Последняя строка, вероятно, приведет к ошибке «рекурсивного макроса». –

+1

Нет, нет. – Lothar

Смежные вопросы