Makefile-Fehler "Mehrere Zielmuster"

82

Mein Makefile schlägt mit Fehler fehl:

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

Was bedeutet es wirklich, wie kann ich das beheben?

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


Fand es. Ich hatte Regel in Form:

$(FOO): bar

Dabei FOOwurde der Shell-Befehl festgelegt, der ihn mit einer Fehlermeldung verschmutzte, die einen Doppelpunkt enthielt.

Kornel
quelle
Diese Antworten sind nur Paraphrasen von "Sie haben mehrere Zielmuster". Nun, ich glaube nicht. Wie kann ich das überprüfen? Was kann es auslösen? Welche Vorsichtsmaßnahmen sind erforderlich, um dieses Problem zu vermeiden?
Kornel
2
Alles funktionierte eine Minute und dann nieste mein Drehbuch aus einem (Halb-) Doppelpunkt ... heheh. Ich habe es mindestens 3 Stunden lang versucht, das Problem zu finden, bevor ich Ihre und @mcrs Antwort gefunden habe. Du hast mir gerade einen Eimer Schweiß gespart !!
GuruM
Die wahre Ursache für dieses Problem ist, dass GNU Make ein schreckliches Stück Mist ist, das vor Jahrzehnten hätte sterben sollen.
antred

Antworten:

62

Ich hatte es auf dem Makefile

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

Es liegt am :im Dateinamen. Ich habe das mit gelöst

                      -------- beachten
                     ///
                    vv
MAPS + = reverse / db.901 \: 550 \: 2001.ip6.arpa
Lastserial: $ {MAPS}
    ./updateser $ {MAPS}
mcr
quelle
1
Ich habe das gleiche Problem, aber ich verstehe Ihre Antwort nicht, werden Sie dies für mich weiter ausarbeiten,
Pir Fahim Shah
4
@PirFahimShah Die Antwort lautet, dass die Doppelpunkte im Dateinamen (db.901: 550: 2001.ip6.arpa) maskiert werden müssen. mcr entkommt den Doppelpunkten, indem es ihnen einen Backslash vorlegt. Auf diese Weise interpretiert make die Doppelpunkte nicht als spezielles Symbol.
Loduwijk
1
Danke, es hat bei mir funktioniert. Ich hatte einen alten Windows-Pfad mit Doppelpunkt ( C:/Qt/5.8/mingw53_32/bin/rcc.exe) in einer der Makefile-Regeln. Entfernen Sie diese automatisch generierten Makefiles, wenn Sie auf einem Linux-Computer bauen
Vadim Kotov
Windows Make wechselte zu WSL (Ubuntu) und bekam diesen Fehler, make cleangefolgt von makebehoben. Die falsche Zeile war_build/nrf52840_xxaa/app_mpu.c.o: ../../../app_mpu.c \
Tyeth
22

Abgesehen davon, dass ich Doppelpunkten wie in der ursprünglichen Antwort entkommen muss, habe ich festgestellt, dass Sie möglicherweise das gleiche Problem bekommen, wenn die Einrückung deaktiviert ist. In einem Makefile musste ich Leerzeichen durch einen Tabulator ersetzen, und so konnte ich den Fehler überwinden.

Demongolem
quelle
GNU make kann in diesem Fall auch "Keine Regel für Ziel" melden.
Davenpcj
4

Ich möchte nur hinzufügen, wenn Sie diesen Fehler erhalten, weil Sie Cygwin make und automatisch generierte Dateien verwenden, können Sie ihn mit dem folgenden sed beheben:

sed -e 's@\\\([^ ]\)@/\1@g' -e 's@[cC]:@/cygdrive/c@' -i filename.d

Möglicherweise müssen Sie bei der ersten Ersetzung mehr Zeichen als nur Leerzeichen zur Escape-Liste hinzufügen, aber Sie haben die Idee. Das Konzept hier ist, dass / cygdrive / c ein Alias ​​für c ist: dass Cygwins Marke erkennt.

Und kann genauso gut einwerfen

-e 's@^ \+@\t@'

Nur für den Fall, dass Sie versehentlich mit Leerzeichen begonnen haben (obwohl ich / denke / dies normalerweise ein "fehlender Trennzeichen" -Fehler ist).

Sean McClain
quelle
3

Ich bin auf den gleichen Fehler gestoßen. Nach dem Kämpfen stellte ich fest, dass es an "Leerzeichen" im Ordnernamen lag.

Zum Beispiel :

Früher Mein Ordnername war: "Qt Projects"

Später habe ich es geändert in: "QtProjects"

und mein Problem wurde behoben.

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

skg
quelle
0

Ich hatte dieses Problem (Doppelpunkte im Zielnamen), weil ich -nin meiner GREP_OPTIONSUmgebungsvariablen hatte. Anscheinend hat dies dazu geführt configure, dass das Makefilefalsch generiert wurde .

Trebor unhöflich
quelle
0

Meine IDE hat eine Mischung aus Leerzeichen und Tabulatoren in meinem Makefile hinterlassen.

Wenn ich mein Makefile so einstelle, dass nur Registerkarten verwendet werden, wurde dieser Fehler für mich behoben.

Paul Wenzel
quelle
0

Ich habe auch diesen Fehler erhalten (innerhalb des Eclipse-basierten STM32CubeIDE unter Windows).

Nach einem Doppelklick auf den Fehler "Mehrere Zielmuster" wurde ein Pfad zu einer .ldDatei angezeigt. Es stellt sich heraus, dass es sich um ein weiteres Problem mit "illegalen Charakteren" handelt. Das beleidigende Zeichen war das (warte darauf): =

Heuristik der Woche: Verwenden Sie nur [a..z] in Ihren Pfaden, da es zwangsläufig andere illegale Zeichen gibt </ vomit>.

Das GNU make-Handbuch dokumentiert dies nicht explizit.

user103185
quelle