2010-01-20 17 views
54

Meine Make-Datei mit Fehlern fehlschlägt:„multiple Zielmuster“ Makefile Fehler

Makefile:34: *** multiple target patterns. Stop. 

Was bedeutet es wirklich, wie kann ich dieses Problem beheben?

(GNU make manual, geschrieben von Captain Obvious, hilft nicht).


Es gefunden. Ich hatte Regel in Form:

$(FOO): bar 

wo FOO wurde von Shell-Befehl eingestellt, dass es mit der Fehlermeldung verunreinigt, die einen Doppelpunkt enthalten.

+0

tut http://www-01.ibm.com/support/docview.wss?uid=swg21119863 oder http://sourceware.org/ml/crossgcc/2009-07/msg00006.html Hilfe? –

+2

Eine schnelle Google enthüllt http://groups.google.com/group/gnu.utils.help/browse_frm/thread/d7eeff06e2b8394/1c932a7ea7664ade?lnk=st&q=%22multiple+target+patterns%22&rnum=7#1c932a7ea7664ade –

+0

Diese Antworten sind nur Paraphrasen von "Sie haben mehrere Zielmuster". Nun, ich denke ich nicht. Wie kann ich es überprüfen? Was kann es auslösen? Welche Vorkehrungen sind erforderlich, um dieses Problem zu vermeiden? – Kornel

Antwort

41

ich es auf dem Makefile hatte

MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial: ${MAPS} 
    ./updateser ${MAPS} 

Es ist wegen der : im Dateinamen. Ich löste dies mit

 
         -------- notice 
        //
        v v 
MAPS+=reverse/db.901\:550\:2001.ip6.arpa 
lastserial: ${MAPS} 
    ./updateser ${MAPS} 
+0

ich habe das gleiche problem, aber ich verstehe deine antwort nicht, wirst du das weiter für mich ausarbeiten, –

+0

bekommst du mich? –

+2

@PirFahimShah Die Antwort besagt, dass die Doppelpunkte im Dateinamen (db.901: 550: 2001.ip6.arpa) maskiert werden müssen. MCR entkommt den Doppelpunkten, indem es einen Backslash vor ihnen setzt. Auf diese Weise interpretiert make die Doppelpunkte nicht als spezielles Symbol. – Aaron

7

Zusammen mit Doppelpunkten zu entkommen, wie in der ursprünglichen Antwort, die ich gefunden habe, wenn die Einbuchtung ausgeschaltet ist Sie möglicherweise das gleiche Problem bekommen könnte. In einem Makefile musste ich Leerzeichen durch einen Tab ersetzen und das erlaubte mir, den Fehler zu umgehen.

+0

aufbauen. GNU make kann in diesem Fall auch "No Rule for Target" melden. – davenpcj

4

Ich möchte nur hinzufügen, wenn Sie diesen Fehler erhalten, weil Sie Cygwin verwenden machen und automatisch generierten Dateien, können Sie es mit dem folgenden sed beheben,

sed -e '[email protected]\\\([^ ]\)@/\[email protected]' -e '[email protected][cC]:@/cygdrive/[email protected]' -i filename.d 

Sie müssen möglicherweise mehr hinzufügen Zeichen als nur Platz für die Escape-Liste in der ersten Ersetzung , aber Sie bekommen die Idee. Das Konzept hier ist, dass/cygdrive/c ist ein Alias ​​für c: dass Cygwins Marke wird erkennen.

Und auch in

-e '[email protected]^ \[email protected]\[email protected]' 

nur für den Fall werfen können Sie mit Leerzeichen Unfall gestartet wurde (obwohl ich/denken/das wird in der Regel ein „fehlendes Trennzeichen“ Fehler sein).

0

Ich hatte dieses Problem (Doppelpunkte im Zielnamen), weil ich -n in meiner GREP_OPTIONS Umgebungsvariable hatte. Offensichtlich verursachte dies configure, um die Makefile falsch zu erzeugen.

2

Ich traf mit dem gleichen Fehler. Nach dem Kämpfen fand ich, dass es wegen "Space" im Ordnernamen war.

Zum Beispiel:

Früher Mein Ordnername war: "Qt Projects"

Später habe ich es zu: "QtProjects"

und mein Problem behoben wurde.

Es ist sehr einfach, aber manchmal ein großes Problem.