Donnerstag, Februar 27, 2020

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

1 Kommentar

  1. 9

    Ich denke, ein Force Target ist, was Sie suchen, hier.

    lib1.a: FORCE
            $(MAKE) -C sub_dir all
    
    FORCE: ;
    

    Als im Vergleich zu einem .PHONY Regel (vorgeschlagen von @MadScientist hier), wird dieser nicht in-und-von-selbst Kraft, alle Ziele, die Sie abhängig lib1.a alle neu erstellen die Zeit. Wird es das nur tun, wenn lib1.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 in sub_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.

Kostenlose Online-Tests