【问题标题】:nmake appending to variablesnmake 附加到变量
【发布时间】:2012-04-08 13:04:24
【问题描述】:
  • 实用程序: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 工作得非常好。

【问题讨论】:

    标签: makefile nmake


    【解决方案1】:

    += 语法是 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)
    

    【讨论】:

      【解决方案2】:

      代替

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

      你必须使用

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

      扩展策略不同于nmake和make。 nmake 在开始评估规则之前扩展所有内容,而 make 仅在需要时进行扩展,因为这会产生问题,因此它具有信息页面中描述的两种扩展方式。

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

      【讨论】:

      • 最后一行很可能导致“递归宏”错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多