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
InformationsquelleAutor my_question | 2014-10-06
Schreibe einen Kommentar