Beim Testen der Parallelisierungsmöglichkeiten im Falle rekursiver make
bin ich auf ein merkwürdiges Verhalten mit den Musterregeln gestoßen.Musterregel für Unterverzeichnisse erstellen
Die Makefile
:
## prepare the dir structure
# mkdir -p bs{1,2,3}
# for i in 1 2 3; do ln -s ../Makefile bs$i ; done
aaa:
@echo $(CURDIR)
sleep 1
s: bs1 bs2 bs3
true
## alt1
bs1 bs2 bs3: ; +make -C [email protected] aaa
## alt2
#bs%: ; +make -C [email protected] aaa
.PHONY: s bs1 bs2 bs3
Es gibt zwei Alternativen, wie die Ziele bestimmen: entweder buchstäblich alle Ziele in der Rezeptliste, alt1-bs1 bs2 bs3
- oder verwenden Sie das %
Muster, alt2 - bs%
.
Wenn ich make -j s
mit der alt1 ausführen, funktioniert es wie erwartet.
Aber wenn ich zu alt2 (Kommentar aus alt1 Regel Kommentar in alt2 Regel) wechseln, die make -j s
läuft nur die true
und ignorieren leise die Voraussetzung bs1
, bs2
und bs3
Ziele.
Ebenso mit alt1, make bs1
ruft die Unter machen, während mit alt2, make bs1
sagt, dass Nothing to be done for 'bs1'.
Der Trick mit dem .force
Dummy-Ziel nicht das Verhalten geändert hat.
Warum?
Mit anderen Worten, in diesem Fall stimmt der Zielname möglicherweise nicht mit dem Verzeichnisnamen überein. – Dummy00001
@ Dummy00001 Es kann, wie Sie gesehen haben, mit der ersten Regel, die Sie definiert haben, Sie können Musterregeln nicht zusammen mit '.PHONY' Zielen verwenden. – user657267