сделать добавление к переменным - PullRequest
7 голосов
/ 24 марта 2012
  • Утилита: NMake
  • Платформа: Windows 7

У меня есть следующий Makefile

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

exec:
    @echo $(FILE)

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

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

В чем может быть причина?

без линии

FILE += $(shell) *.cpp

nmake работает отлично.

Ответы [ 2 ]

6 голосов
/ 24 марта 2012

Синтаксис += представляет собой расширение 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 голосов
/ 24 марта 2012

вместо

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

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

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

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

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

...