Makefile nmake追加到变量 实用程序:NMake 平台:Windows7

Makefile nmake追加到变量 实用程序:NMake 平台:Windows7,makefile,nmake,Makefile,Nmake,我有下面的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工作得非常好 语法是8

我有下面的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工作得非常好

语法是80年代后期Sun的
make
中首创的扩展。它不是POSIX标准或原始AT&T语法的一部分

如果你使用扩展,当你切换到一个不支持扩展的系统时,你会被抓住。你要么重新设计(硬的),要么坚持原来的系统


修改文件以使用
nmake
的一种方法可能是:

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

exec:
    @echo $(FILE)
或者,如果未定义宏
shell
,甚至:

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

exec:
    @echo $(FILE)
而不是

FILE = $(shell) *.c
FILE += $(shell) *.cpp
你必须使用

FILE = $(shell) *.c
FILE = $(shell) *.cpp $(FILE)
扩张战略不同于nmake和make。nmake在开始评估规则之前会展开所有内容,而make只会在需要时展开,因为这会带来问题,所以它有两种展开风格,如信息页面中所述


我个人更喜欢nmake的方式。顺便说一下,使用“jom”而不是“nmake”。

最后一行可能会导致“递归宏”错误。