2016-06-09 18 views
0

Ich habe die folgende Ordnerstruktur in einem 2D-Terrarien/Minecraft Stil Spiel:C++ müssen Header enthalten viele Verzeichnisse bis

src/ 
- Backend/ 
- - Vector.hpp 
- World/ 
- - Elements/ 
- - - Mobs/ 
- - - - BaseMob.cpp 

Wie Sie sich vorstellen würde, gibt es viel mehr Quelldateien in jedem Verzeichnis. Inside BaseMob.cpp Ich muss auf src/Backend/Vector.hpp zugreifen. Gibt es eine bessere Möglichkeit, #include "../../../Backend/Vector.hpp" (dh #include "/Backend/Vector.hpp") zu schreiben oder die Dateien in meinem Quellordner besser zu organisieren?

Hier einige weitere Informationen über den tatsächlichen Inhalt in den Quellordner (die meisten .cpp Dateien ausgeschlossen sind):

Backend/ # Anything specific to a particular platform 
- Vector.hpp 
- Graphics.hpp 
World/ # Anything about the whole game's world 
- Elements/ 
- - Mobs/ 
- - - BaseMob.hpp # Polymorphic base class 
- - - MobHandler.hpp # Manages all mobs in world 
- - - PlayerMob.hpp 
- - - WaterMob.hpp 
- - Block.hpp # Defines all possible blocks 
- - Inventory.hpp 
- - Furnace.hpp 
- World.hpp 
- WorldRenderer.hpp # Makes calls to Backend/graphics.hpp 
main.cpp 
+1

Sie könnten ein Makefile verwenden oder Ihren Systempfad ändern. –

+0

Organisieren Sie die Dateien auf die logischste Art und befolgen Sie dann eine konsistente Regel, um auf sie zu verweisen. Zum Beispiel empfiehlt Google IIRC absolute Pfade statt relative. Macht Sinn, wenn Sie Dateien viel bewegen, bevorzuge ich eine Balance, kann eine Ebene nach oben/unten relativ zum Rest absolut sein ... – Nim

+0

Ich würde wahrscheinlich '#include" Backend/Vector.hpp "' aber es hängt von der Lage. – drescherjm

Antwort

4

Sie in Erwägung ziehen könnte Einschluss- Ordner neu zu organisieren. Dies ist eine mögliche Lösung, aber möglicherweise nicht genug: Sie werden nicht in der Lage sein, das zu tun, wenn Sie beginnen, Bibliotheken von Drittanbietern zu verwenden ... also brauchen Sie einen besseren Weg, um das zu beheben.

Saubere Möglichkeit besteht darin, benötigte Ordner (der Ordner, in dem die benötigten Header-Dateien gespeichert sind) in den vom Compiler verwendeten "Include-Pfad" einzufügen, damit er sie finden kann.

Dann statt #include "World/Elements/Mobs/BaseMob.hpp", fügen Sie World/Elements/Mobs auf die Pfade enthalten und führen Sie dann einfach #include "BaseMob.hpp"

Wenn Sie einen anderen Compiler/IDE verwenden, muss eine Option dafür zur Verfügung stehen.

+0

Empfehle das Werfen eines Beispiels wie '#include" World/Elements/Mobs/BaseMob.hpp "' nur der Vollständigkeit wegen. – user4581301

0

Ich empfehle, keine Pfade in # include-Anweisungen zu platzieren. Wenn sich die Datei verschiebt, müssen Sie alle Quellen ändern.

IMO, eine bessere Methode ist es, dem Compiler mitzuteilen, wo nach den Include-Dateien gesucht wird. Eine übliche Befehlszeilen-Compileroption ist "-I" (Großbuchstabe i). In IDEs gibt es möglicherweise eine Einstellung, in der Sie alle zu durchsuchenden Pfade auflisten können.

Indem Sie dem Compiler mitteilen, wo gesucht werden soll, können Sie Dateien einschließen, die sich überall befinden und verschieben können, und Sie müssen den Quellcode nicht ändern.

+1

Aber öffnet das nicht auch eine Dose Würmer? Mit -I, würde nicht "World/Renderer.hpp" und Menü/Renderer.hpp ein Problem erstellen? –

+1

Ja, funktioniert nicht für Dateien mit demselben Namen in verschiedenen Verzeichnissen. Allerdings habe ich normalerweise eindeutige Dateinamen wie 'MenuRenderer.hpp' und' WorldRenderer.hpp', daher habe ich das Problem nicht. –