Kann ich in einem Makefile eine Regel aus einer anderen Regel aufrufen?
Ähnlich zu:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Verwenden Sie entweder Abhängigkeiten oder rekursives Erstellen, um eine Verbindung von einer Regel zur anderen herzustellen.
Abhängigkeiten würden wie folgt ausgeführt (obwohl die Reihenfolge unterschiedlich sein wird):
rule1:
echo "bye"
rule2:
date
rule3: rule1
@echo "hello"
Rekursives Erstellen würde folgendermaßen erfolgen (obwohl es sich um einen Unterprozess handelt):
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
$(MAKE) rule1
Weder ist perfekt; In der Tat können Sie mit rekursivem Make in erhebliche Probleme geraten, wenn Sie eine Schleife erstellen. Sie sollten wahrscheinlich auch eine .PHONY
Regel hinzufügen , um diese Regeln als synthetisch zu kennzeichnen, damit ein Streuner rule1
(usw.) im Verzeichnis keine Verwirrung stiftet.
Fügen Sie einfach eine neue Regel mit der gewünschten Reihenfolge hinzu.
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
make -j2
zum Beispiel) eine unbestimmte Ausführungsreihenfolge.rule4: | rule3 rule1
Makefiles sind nicht prozedural; "Regeln" sind keine Funktionen. Sie können jedoch angeben, dass eine Regel eine Voraussetzung für eine andere ist:
Wenn Sie dies tun
make rule2
, sollten Sie sehen:quelle
In GNU Make gibt es zwei erweiterte Funktionen, die dies tun können, obwohl sie nur unter mildernden Umständen verwendet werden sollten. Diese SO ist in Google am besten bewertet.
Regelvoraussetzungen werden eher empfohlen, aber manchmal benötigen Sie eine Nachanforderung.
GNU-Anruffunktion
GNU Make Eval-Funktion
Im Wesentlichen können Sie mit Eval Ziele im laufenden Betrieb erstellen, und mit Call können Funktionen wie "Definieren" erstellt werden.
quelle
Ein einfacher Weg, dies zu tun, ist:
quelle