“参数”@:在makefile中是不正确的?

时间:2016-11-20 16:29:20

标签: makefile gnu-make

以下makefile片段中的行@:会导致

make (e=87): The parameter is incorrect.
Makefile:210: recipe for target 'depend' failed

(第210行是@:)的第一个实例

为什么?

# We check if any depfile is newer than Makefile and decide to
# concatenate only if that is true.
depend:
    @: 
    @if egrep "^# DO NOT DELETE THIS LINE" Makefile >/dev/null && [ -z "`find $(DEPS) -newer Makefile 2>/dev/null; exit 0`" ]; then :; else \
      ( $(PERL) -pe 'exit 0 if /^# DO NOT DELETE THIS LINE.*/' < Makefile; \
        echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \
        echo; \
        for f in $(DEPS); do \
          if [ -f $$f ]; then cat $$f; fi; \
        done ) > Makefile.new; \
      if cmp Makefile.new Makefile >/dev/null 2>&1; then \
        rm -f Makefile.new; \
      else \
        mv -f Makefile.new Makefile; \
      fi; \
    fi
    @: 

make -v提供以下版本信息

GNU Make 3.82.90
Built for i686-pc-mingw32

1 个答案:

答案 0 :(得分:0)

首先,你使用的是GNU make版本(3.82.90),它不仅陈旧,而且更重要的是它是一个预发布版本(所有xx9x版本号都是下一个主要版本的alpha / beta版本发布)。您至少应该切换到GNU make的真实版本:预发布版本有错误和问题在最终版本发布之前已经解决。

但是,您的问题可能是您在Windows上构建,并且您的makefile是为UNIX / POSIX系统编写的。在POSIX shell中,:命令是no-op命令,因此序列@:表示不打印命令(make @前缀),后跟shell do-nothing命令(:)。我不知道为什么它在你的makefile中,但显然你正在使用的make版本没有调用POSIX shell,所以它不知道这个命令。