Makefiles in mehreren Verzeichnissen

8

Ich möchte eine App erstellen und ich habe mehrere Module in mehreren Verzeichnissen gespeichert. Ich habe mich entschieden, dieser Idee zu folgen, d. H. Ein Makefile in jedem Verzeichnis zu haben und es dann zusammenzuführen. Aber als Anfänger-Programmierer sehe ich immer noch nicht, wie ich das machen soll. Wie würden solche "partiellen" Makefiles aussehen? Sie können keine Hauptfunktion haben, da es nur eine pro Binärdatei geben kann. Wenn ich jedoch versuche, sie zu kompilieren, klagt gcc über den undefinierten Verweis auf main. Zweitens habe ich keine Ahnung, wie das Zusammenstellen all dieser Module aussieht.

Ich würde jede Hilfe zu schätzen wissen, aber bitte versuchen Sie, Ihre Antworten einfach zu halten. Makefiles sind immer noch ein bisschen schwarze Magie für mich.

    
yauser 17.10.2012, 22:19
quelle

1 Antwort

25

Bevor Sie etwas mit einem Makefile machen können, müssen Sie wissen, wie man es ohne Makefile macht.

Da Sie gcc verwenden, nehme ich an, dass Ihr Quellcode C ++ ist.

Sie haben uns nicht gesagt, wie Ihre Verzeichnisstruktur aussieht, also nehme ich an, dass Sie drei Quelldateien in zwei Verzeichnissen haben: primary/main.cc , other/foo.cc und other/bar.cc . (Wir können später mit Header-Dateien wie foo.h umgehen.) Und Sie möchten myApp erstellen.

SCHRITT 1: Handgemacht

Um dies in einem Befehl zu tun, könnten Sie verwenden:

%Vor%

Dadurch werden die drei Quelldateien kompiliert und die binären Objekte in der ausführbaren Datei myApp miteinander verknüpft.

SCHRITT 2: In Stücke gehen (Versuchen Sie dies nicht, bis der vorherige Schritt perfekt funktioniert.)

Anstatt mit einem Befehl zu bauen, könnten Sie einen Zwischenschritt machen und die Quelldateien in binäre Objektdateien kompilieren:

%Vor%

Dies erzeugt alpha/main.o , beta/foo.o und beta/bar.o . Der Compiler beschwert sich nicht über foo und bar fehlt eine main() -Funktion, weil eine Objektdatei keine benötigt. Dann verknüpfen Sie die Objekte zu einer ausführbaren Datei:

%Vor%

SCHRITT 3: Lokal machen (Versuchen Sie nicht, bis der vorherige Schritt perfekt funktioniert.)

Genau wie im vorherigen Schritt, aber wir handeln in primary/ und other/ :

%Vor%

SCHRITT 4: Verwenden eines Makefiles (Versuchen Sie nicht, bis der vorherige Schritt perfekt funktioniert.)

Wir könnten ein Makefile STEP 1 ausführen lassen, aber das ist nicht wirklich notwendig. Schreiben Sie ein Makefile in primary (also primary/makefile ) wie folgt:

%Vor%

(Das Leerzeichen in% von gcc... ist ein TAB.)

Versuchen Sie Folgendes:

%Vor%

SCHRITT 5: Verwenden mehrerer Makefiles (Versuchen Sie dies nicht, bis der vorherige Schritt perfekt funktioniert.)

Schreibe ein other/makefile :

%Vor%

und ein Makefile im obersten Verzeichnis, in dem du myApp :

erstellst %Vor%

Versuchen Sie Folgendes:

%Vor%

SCHRITT 6: Verwenden eines Makefiles, das andere anruft (Versuchen Sie dies nicht, bis der vorherige Schritt perfekt funktioniert.)

Bearbeite das obere Makefile:

%Vor%

Versuche es jetzt:

%Vor%

Wenn all das funktioniert, ist das grobe, aber effektive Makefile-System. Es gibt viele Verbesserungen möglich, wenn Sie bereit sind, die Trainingsräder abzunehmen.

BEARBEITEN:

Wenn sich viele Quelldateien in einem Unterverzeichnis befinden (z. B. other/ ) und Sie keine Liste im obersten Makefile manuell pflegen möchten, gibt es mehrere Möglichkeiten, damit umzugehen. Das ist eins:

%Vor%

Aber Sie sollten diese Makefiles arbeiten und sie verstehen, bevor Sie weitere Straffung versuchen.

    
Beta 17.10.2012, 22:50
quelle

Tags und Links