Geschachtelte Makefile erstellen

8

Ich lerne Makefiles und ich weiß, wie man ein einfaches Makefile erstellt. Ich gehe zu verschachtelten Makefiles über. Hier ist meine Verzeichnisstruktur

%Vor%

Wenn root makefile aufgerufen wird, ruft es das Makefile im Verzeichnis foo auf. Hier sind meine Fragen

  1. Welches Makefile sollte ich verwenden, um Code zum Verknüpfen aller Objektdateien zu schreiben? Wenn ich mich im Root-Makefile befinde, muss ich dort alle Objektdateinamen angeben?
  2. Sind diese verschachtelten Makefiles eine Best Practice? Oder ist es gut, nur ein Makefile zu haben, das an der Wurzel ist?

Jede Hilfe wäre großartig!

    
Navaneeth K N 07.04.2009, 03:42
quelle

3 Antworten

15

Es gibt eine Menge zu sagen für nicht dies zu tun. Lesen Sie Rekursiv als schädlich ansehen . Auch in PDF-Formular .

Die kurze, kurze Version besteht darin, dass rekursives make mehrere disjunkte, aber möglicherweise überlappende Abhängigkeitsbäume erstellt und weder einen korrekten noch einen maximal effizienten Build garantiert. Das Problem wird schlimmer, wenn Sie hoffen, parallel zu bauen.

Um das Problem zu lösen, ordnen Sie eine einzelne, nicht-rekursive make an, die eine einzige übergreifende Abhängigkeitsstruktur erstellt, die es ermöglicht, alle oben genannten Probleme zu lösen.

Beispielstrukturen für nicht-rekursive Marken und Lösungen für die verschiedenen kniffligen Probleme, die beim Schreiben auftauchen, finden Sie in der Originalarbeit und in den Antworten auf:

dmckee 07.04.2009 03:46
quelle
3

Rekursives make wird im Allgemeinen als schädlich angesehen.

Wenn Sie wirklich "make" in das Root-Verzeichnis eingeben wollen und alles nur mit POSIX-Makefiles erstellen möchten, ist dies die einzige Möglichkeit. Verknüpfen Sie in diesem Fall die Teilprojekte in ihrem eigenen Verzeichnis und finalisieren Sie sie in root.

Wenn Sie bereit sind, die gmake-Syntax zu verwenden, sehen Sie sich die Makefiles hier an: Ссылка

    
singpolyma 07.04.2009 03:48
quelle
0

Es gibt modernere Build-Systeme wie SCons , die eine einfachere Syntax haben, als viele Fehler zu machen und zu vermeiden. Zum Beispiel scannt SCons die Quelldateien, um Abhängigkeiten zu ermitteln, während man für make Abhängigkeiten manuell angeben muss. Wenn Sie z.B. Fügen Sie einer Implementierungsdatei eine neue # include-Anweisung hinzu make wird diese Implementierungsdatei nicht neu kompilieren, wenn sich die Header-Datei ändert (es sei denn, Sie fügen die neue Abhängigkeit hinzu). SCons erkennt automatisch die neue Abhängigkeit und kompiliert alles Notwendige neu.

    
lothar 07.04.2009 04:02
quelle

Tags und Links