2016-11-20 49 views
0

在以下生成文件片斷線路@:導致「參數」@:在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 

回答

0

首先,你使用GNU的版本使(3.82.90),這不僅是老了,但更重要的是它是一個預發佈版本(所有xx9x版本號都是下一個主要版本的alpha/beta版本)。您至少應該切換到GNU make的真正版本:預發佈版本包含錯誤和最終版本之前解決的問題。

但是,您的問題可能是您在Windows上構建並且makefile是爲UNIX/POSIX系統編寫的。在POSIX shell中,:命令是no-op命令,所以序列號@:表示不打印命令(make的@前綴),後跟shell執行無命令(:)。我不知道爲什麼它在你的makefile中存在,但顯然你使用的版本不是調用POSIX shell,所以它不知道這個命令。