2016-11-20 11 views
0

Линия @: в следующем фрагменте кода Makefile вызывает"Параметр" @: в файле 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 Make (3.82.90), который не только старые, но еще более важно, это пре-релиз (все номера релизов xx9x являются альфа-бета-версиями для следующего основного выпуска). Вы должны хотя бы переключиться на реальный выпуск GNU make: в предварительных релизах есть ошибки и проблемы, которые были решены до окончательной версии.

Однако ваша проблема заключается в том, что вы строите на Windows, и ваш make-файл был написан для системы UNIX/POSIX. В оболочке POSIX команда : является командой no-op, поэтому последовательность @: означает, что не печатайте команду (префикс @), за которым следует команда dox no shell (:). Я не знаю, почему он находится в вашем make-файле, но, очевидно, версия, которую вы используете, не вызывает оболочку POSIX, поэтому она не знает об этой команде.