我有以下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完美无缺。
答案 0 :(得分:6)
+=
语法是GNU Make扩展,是80年代后期Sun的make
中的先驱。它不是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)
答案 1 :(得分:2)
而不是
FILE = $(shell) *.c
FILE += $(shell) *.cpp
你必须使用
FILE = $(shell) *.c
FILE = $(shell) *.cpp $(FILE)
扩张策略与nmake和make不同。 nmake在开始评估规则之前扩展了所有规则,而make只在需要的时候进行扩展,因为这会产生问题,它具有信息页面中描述的两种扩展方式。
我个人更喜欢nmake的方式。顺便说一下,使用“jom”而不是“nmake”。