2016-11-20 4 views
0

Die Linie @: in dem folgenden Makefile-Schnipsel verursacht"Parameter" @: in Makefile ist falsch?

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

(Linie 210 die erste Instanz von @: ist)

Warum?

# 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 gibt die folgende Versionsinformation

GNU Make 3.82.90 
Built for i686-pc-mingw32 

Antwort

0

Zuerst sind Sie eine Version von GNU mit machen (3.82.90), die nicht nur alt, aber noch wichtiger ist es eine Pre-Release Version (alle xx9x-Versionsnummern sind Alpha/Beta-Versionen für die nächste Hauptversion). Sie sollten zumindest zu einer echten Version von GNU make wechseln: Vorabversionen haben Bugs und Probleme, die vor der endgültigen Veröffentlichung behoben wurden.

Ihr Problem besteht jedoch wahrscheinlich darin, dass Sie auf Windows aufbauen und Ihr Makefile für ein UNIX/POSIX-System geschrieben wurde. In einer POSIX-Shell ist der : Befehl ein No-Op-Befehl, so dass die Sequenz @: bedeutet, dass der Befehl (make @ Präfix), gefolgt von einem Shell-do-nothing Befehl (:), nicht gedruckt wird. Ich weiß nicht, warum es in Ihrem Makefile ist, aber die Version von make, die Sie verwenden, ruft keine POSIX-Shell auf, daher kennt sie diesen Befehl nicht.

Verwandte Themen