2016-05-23 5 views
1

Ich habe ein Projekt erstellt, von dem ich anfangs dachte, dass es einfach wäre (einige Dateien), aber jetzt wächst das Projekt. Ich versuche, die Verzeichnisstruktur zu reorganisieren, aber ich bin nicht sicher, wie man das Makefile ändert. HierÄndern der Projektorganisation mit Makefile

ist die Struktur Ich habe:

root_dir 
    Makefile 
    main.cc 
    fileA.cc 
    fileA.h 
    fileB.cc 
    fileB.h 

Auch fileB von dateiA abhängt (#include "fileA.h") und mein Makefile sieht wie folgt aus:

all: myExec 

myExec: main.o fileA.o fileB.o 
    g++ -Wall main.o fileA.o fileB.o -o myExec 

main.o: main.cc fileA.h fileB.h 
    g++ -Wall -c main.cc 

fileA.o: fileA.cc fileA.h 
    g++ -Wall -c fileA.cc 

fileB.o: fileB.cc fileB.h fileA.h 
    g++ -Wall -c fileB.cc 

Nun möchte Ich mag so etwas haben :

root_dir 
    Makefile 
    main.cc 
    dirA 
    fileA.cc 
    fileA.h 
    dirB 
    fileB.cc 
    fileB.h 

Ich habe gelesen, dass ich ein Makefile in jedem Unterdi erstellen konnte Pfarrhaus, aber ich bin mir nicht sicher, dass dies hier machbar ist, da Datei B von Datei A abhängt (die in einem anderen Unterverzeichnis ist).

Oder sollte ich mein Haupt-Makefile ändern, um das Unterverzeichnis einzubeziehen?

Vielen Dank.

+0

Wie funktioniert Ihr aktuelles Makefile? – Quentin

+0

Sie müssen ein Beispiel aus der Praxis liefern, wie hängt "DateiB" von "DateiA" ab? Details wie diese sind entscheidend, Sie haben nicht einmal gesagt, was Sie machen, ausführbare Dateien? Bibliotheken? – user657267

+0

Ich habe die Makefile Beschreibung hinzugefügt. Ich erwähnte FileB include fileA (#include 'fileA.h'). Ich erstelle eine ausführbare Datei. – whiteShadow

Antwort

0

Wenn Sie bei einem einzelnen Makefile bleiben, ist es wirklich nicht so anders als das, was Sie bereits tun, Sie müssen nur die Include-Flags korrekt setzen. Ihr Makefile kann dank der integrierten Regeln von make ebenfalls stark vereinfacht werden. Mit den Flags zur Abhängigkeitserzeugung von GCC müssen Sie die Header nicht manuell hinzufügen.

N.b. Ändern main.cc zu myExec.cc, es ist intuitiver IMO und ermöglicht es Ihnen, das Link Rezept zu überspringen.

Das heißt, es ist schwer zu sehen, was der Vorteil wäre, Ihr Projekt in mehrere Verzeichnisse mit einem solchen künstlichen Beispiel zu teilen.

+0

Danke. Allerdings finde ich deine Lösung nicht einfach zu lesen. Außerdem bleibt es ziemlich einfach, weil es ein einfaches Beispiel ist, das ich gab, aber in Wirklichkeit habe ich ungefähr 10 Unterverzeichnisse, was das Makefile mit Ihrer Lösung sehr kompliziert macht, nicht wahr? – whiteShadow

+0

Ich benutzte diese Website, um Makefile zu "lernen": http://mrbook.org/blog/tutorials/make/ – whiteShadow

+0

@whiteShadow Es hängt davon ab, ob alles, was Sie haben, andere Quelldateien für die gleiche ausführbare Datei in diesen Verzeichnissen ist, dann ist es so einfach Wenn Sie das Verzeichnis zu 'Wildcard' hinzufügen, sollten Sie wahrscheinlich darüber nachdenken, das Makefile-Verzeichnis als Include-Root zu verwenden und' #include "dirB/fileB.h" usw., so dass Sie kein separates Include angeben müssen Verzeichnisse beim Kompilieren – user657267