Ich schreibe ein Makefile, das an einer Stelle einen String-Abgleich durchführt. Der Code lautet wie folgt:
if test ...; \
then \
shell scripts... \
fi
ifeq ($(DIST_TYPE),nightly)
shell scripts ...
endif
Hier ist das erste if
Shell-Skript, das zweite ifeq
ist die Bedingung von GNU Make. Der folgende Fehler wird jedoch generiert:
ifeq (jede Nacht, jede Nacht)
/ bin / sh: -c: Zeile 0: Syntaxfehler in der Nähe eines unerwarteten Tokens `nightly, nightly '
/ bin / sh: -c: Zeile 0: `ifeq (jede Nacht, jede Nacht) '
Was passiert hier? Es scheint, dass Make versucht, die Shell aufzurufen.
Vielen Dank.
sh
(wie die erste) mit bedingten Anweisungen inmake
(wie die zweite).Antworten:
Ich spielte um den Code herum und stellte fest, dass die bedingten Anweisungen ohne Einrückung geschrieben werden sollten, und dies löste mein Problem.
Wenn es keine Einrückung gibt, wird Make sie als Richtlinie für sich selbst behandeln. Andernfalls wird es als Shell-Skript angesehen.
Beispielcode
Falsch:
Richtig:
quelle
Wenn die bedingten Anweisungen zum Definieren von Funktionen verwendet werden, wie z.
In diesem Fall behandelt Make es auch als Shell-Skript.
Dieses Problem kann gelöst werden, indem stattdessen die if-Funktion verwendet wird:
quelle