Wie kann ich erzwingen, Machen, ausführen, ein Rezept, die ganze Zeit
Dem aktuellen Makefile hat so etwas wie dieses:
target1 : lib1.a lib2.a
target2 : lib1.a lib3.a
target3 : lib3.a
lib1.a:
$(MAKE) -C sub_dir all
Möchte ich dies ändern Makefile so, dass überall dort, wo ein Ziel hängt von lib1.a
es immer führen Sie den Befehl "$(MAKE) -C sub_dir all
", immer. Anderen Worten, in dem obigen Beispiel, target1 und target2 wird immer ausgeführt "$(MAKE) -C sub_dir all
". Gibt es eine Möglichkeit, dass ich das tun kann?
Ich weiß, der folgende Code funktioniert nicht:
target1 : lib2.a
$(MAKE) -C sub_dir all
target2 : lib3.a
$(MAKE) -C sub_dir all
target3 : lib3.a
Weil wenn lib2.a hat kein update, das der Befehl nicht ausgeführt. Ich habe einen Einschränkung, dass ich nur Kontrolle lib1.eine, die ich nicht ändern kann, wie lib2.ein gebaut ist.
Jede Hilfe ist willkommen!
UPDATE: ich habe folgende Lösung:
target1 : lib1.a lib2.a
target2 : lib1.a lib3.a
target3 : lib3.a
lib1.a: relay
.PHONY: relay
relay:
$(MAKE) -C sub_dir all
Den GNU Make helfen sagt, dass die KRAFT nicht mehr so effektiv .UNECHT, aber von deiner Erklärung scheint es mir, KRAFT ist besser. Muss ich falsch verstanden???
- Sie können hinzufügen
.PHONY: lib1.a
aber dies wird dazu führen, dass alle Ziele auf, die erneut verknüpft werden, die ganze Zeit. - stellen Sie target hängt etwas (die sub_dir?) das wiederum hängt davon ab, lib1.ein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, ein
Force Target
ist, was Sie suchen, hier.Als im Vergleich zu einem
.PHONY
Regel (vorgeschlagen von @MadScientist hier), wird dieser nicht in-und-von-selbst Kraft, alle Ziele, die Sie abhängiglib1.a
alle neu erstellen die Zeit. Wird es das nur tun, wennlib1.a
tatsächlich ändert.Bessere Lösung ist zwar wahrscheinlich, um loszuwerden, der sub-stellen vollständig und tatsächlich haben die Abhängigkeitsinformationen für
lib1.a
zur Verfügung, um dieses makefile (entweder direkt oder über eine mitgelieferte makefile insub_dir
) da, die verhindert, dass dieser ganze "Kraft dieses Rezept, da kann ich Ihnen nicht sagen, wie zu sagen, wenn das Ziel muss aktualisiert werden" - problem.