webentwicklung-frage-antwort-db.com.de

VC2010 C++ - Quelldateien organisieren

Ich hatte einige Fragen zum Organisieren von Quelldateien in einem VC 2010-C++ - Projekt. Die Standardfilter, die enthalten sind, werden nicht ausreichen, da letztendlich eine Menge von .cpp- und .hpp-Dateien zur Verfügung stehen wird. Ich möchte im Stammverzeichnis des Projekts einen Ordner mit dem Namen "source" erstellen und dann in "source" Ordner für die verschiedenen Quelldateikategorien erstellen, die ich verwenden möchte. Wenn ich mit der rechten Maustaste auf die Lösung klicke, habe ich nur die Möglichkeit, einen Filter hinzuzufügen, nicht einen Ordner. Ich kann Ordner manuell in Windows Explorer erstellen und sie dann hinzufügen, aber dann kann ich keine Filter hinzufügen. Gibt es eine Möglichkeit, neue Ordner hinzuzufügen (ohne Windows Explorer zu verwenden) und trotzdem Filter zu verwenden?

Gibt es außerdem etwas Ähnliches wie $ (CURDIR), mit dem ich den Quelldateiordner einschließen könnte, ohne einen absoluten Pfad zu benötigen? 

Vielen Dank im Voraus für die Hilfe

61
Megatron

Sie sind ein wenig verwirrt darüber, wie Visual Studio mit C++ - Dateien arbeitet, aber das ist in Ordnung, da die Dokumentation mies ist. Das Wichtigste zuerst: Im Gegensatz zu C # oder Java hat die Anordnung der Dateien im Projekt keine Beziehung zur Anordnung der Dateien auf Ihrer Festplatte. Dateien und Ordner befinden sich nicht wirklich im Projekt. Das Projekt listet nur die Namen und Pfade der Dateien und Ordner auf, die bereits auf Ihrer Festplatte vorhanden sein müssen.

Im Allgemeinen erstellen Sie das Layout von Ordnern mit Quelldateien in diesen Ordnern. Sie tun dies außerhalb von Visual Studio. Sie erstellen auch eine Projektdatei. Wenn Sie dem Projekt eine Datei hinzufügen, müssen Sie dem Projekt lediglich mitteilen, wo sich die Datei auf der Festplatte befindet.

Lassen Sie uns an einem konkreten Beispiel arbeiten und ich zeige Ihnen, wie ich es organisieren würde. Angenommen, Sie erstellen ein Grafikrechnerprogramm mit dem Namen SuperCalc. Sie haben einen Quellordner und erstellen dann Ordner in Source, in denen die verschiedenen Dateien gespeichert werden. Angenommen, Sie erstellen folgende Ordner:

  • SuperCalc\Source\Input
  • SuperCalc\Source\Math
  • SuperCalc\Source\Math\Matrix
  • SuperCalc\Source\Output

Sie haben 3 Unterverzeichnisse von Source: Input, Output und Math. Das Unterverzeichnis Math hat ein Unterverzeichnis namens Matrix. Sie haben CPP-Dateien in Input, Math, Matrix und Output. Sie erstellen diese Verzeichnisse (Ordner) mit Windows Explorer oder der Eingabeaufforderung.

Jetzt möchten Sie auch eine Lösungsdatei (SuperCalc.sln) und eine Projektdatei (SuperCalc.vcxproj & SuperCalc.vcxproj.filters) erstellen. Machen Sie das in Visual Studio. Normalerweise befindet sich die Projektdatei in einem Unterordner des Lösungsverzeichnisses. Dies wird von Visual Studio automatisch für Sie erledigt. Wählen Sie einen Speicherort für die Lösungsdatei - diese sollte sich in derselben Verzeichnisstruktur (Ordnerstruktur) wie der Quellcode befinden. Ich würde vorschlagen, es neben das Quellverzeichnis zu stellen, in:

  • SuperCalc\Build

Gehe in VS und wähle File > New > Project > Visual Studio Solutions > Blank Solution File. Geben Sie der Lösung einen Namen (möglicherweise "SuperCalc") und einen Ort (den Ort, den wir gerade im Verzeichnis SuperCalc\Build ausgewählt haben). Dadurch wird die Lösungsdatei für Sie erstellt.

Klicken Sie nun im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe ("Projektmappe SuperCalc, 0 Projekte") und wählen Sie Add > New Project. Wählen Sie einen Namen - dies ist der Name Ihrer Programmdatei, wie "SuperCalc"! Wählen Sie Win32, entweder Win32-Konsolenanwendung (dies ist ein DOS-Konsolenprogramm) oder Win32-Projekt (dies ist ein gewöhnliches Windows-GUI-Programm). Normalerweise klicke ich dann auf Anwendungseinstellungen, um einige wichtige Änderungen vorzunehmen: Zum einen wähle ich "Leeres Projekt", weil Visual Studio keine Dateien und keinen Code für mich erstellen soll, es sei denn, ich möchte dies mitteilen. Wenn alles so eingerichtet ist, wie ich es möchte, klicke ich auf FINISH.

Jetzt haben Sie Ihre Lösungsdatei und Ihr Projekt, die von Visual Studio erstellt wurden. Sie haben auch Ihren Quellcode oder zumindest die Verzeichnisstruktur (Ordnerstruktur), in der Ihr Quellcode erstellt wird, außerhalb von Visual Studio. Es ist Zeit, die beiden Dinge miteinander zu verbinden.

Wenn Sie möchten, können Sie alle Ihre Quelldateien im Filter Quelldateien Ihres Projekts auflisten. Auch wenn sie aus unterschiedlichen Verzeichnissen stammen (Eingabe, Matrix usw.), besteht keine erforderliche Beziehung zwischen den Speicherorten der Dateien auf der Festplatte und ihrem Erscheinungsbild im Projekt. Wenn Sie jedoch über viele Dateien verfügen, ist es einfacher, "Unterfilter" zu erstellen, Filter im Filter "Quelldateien" zu verwenden und ihnen die Namen der Unterordner von Source zuzuweisen. Auf diese Weise replizieren Sie die Struktur Ihrer Festplattenverzeichnisse in Ihrer Projektdatei.

Klicken Sie mit der rechten Maustaste auf den Filter Quelldateien des Projekts "SuperCalc" und wählen Sie Hinzufügen> Neuen Filter hinzufügen. Geben Sie ihm den Namen Input (das erste der SuperCalc\Source-Verzeichnisse). Erstellen Sie auch die Filter Math und Output. Klicken Sie mit der rechten Maustaste auf den Filter Math und wählen Sie Hinzufügen> Neuen Filter hinzufügen, um einen Unterfilter mit dem Namen Matrix (innerhalb von Math) zu erstellen. Jetzt haben Sie diese Filter :

 SuperCalc 
 Quelldateien 
 Eingabe 
 Mathematik 
 Matrix 
 Ausgabe 

welche Parallelen haben die zuvor erstellten Verzeichnisse (Ordner)? Dies ist eine rein bequeme Anordnung für den Menschen . Visual Studio versteht nichts Besonderes. Wenn Sie VS nur anweisen, "eine Datei hinzuzufügen", wird die Datei nicht im richtigen Filter abgelegt. Sie müssen ihm sagen, wo er abgelegt werden soll.

Wählen Sie zum Hinzufügen oder Erstellen Ihrer CPP-Dateien den Filternamen aus, der dem Verzeichnis entspricht, in dem sich die CPP-Datei befindet. Klicken Sie zum Hinzufügen oder Erstellen einer Datei SuperCalc\Source\Math\Matrix\matrix_multiply.cpp im Projektmappen-Explorer mit der rechten Maustaste auf den Filter Matrix und wählen Sie Hinzufügen> Neue Datei hinzufügen oder Vorhandene Datei hinzufügen. (Vorhandene Datei hinzufügen ist für den Fall, dass Sie matrix_multiply.cpp bereits geschrieben haben und dem Projekt nur mitteilen möchten, wo es sich befindet.) Verwenden Sie das Dialogfeld, um zum Verzeichnis Source\Math\Matrix zu navigieren. Wiederholen Sie diesen Vorgang für alle Quelldateien in Ihrem gesamten Programm.

Sie hatten auch die Frage "Gibt es etwas Ähnliches wie $ (CURDIR), das ich verwenden könnte, um den Quelldateiordner einzuschließen, ohne einen absoluten Pfad zu benötigen?" Sie haben Glück: Visual Studio-Projekte verwenden keine absoluten Pfade! Sie verwenden relative Pfade. In der Projektdatei wird der relative Pfad gespeichert, der erforderlich ist, um vom Verzeichnis mit der .vcxproj-Datei zum Verzeichnis mit der Quelldatei zu gelangen. Wenn Sie also SuperCalc.sln und SuperCalc.vcxproj dort erstellt haben, wo ich es vorgeschlagen habe (das Verzeichnis SuperCalc\Build) und Ihre CPP-Dateien in den Quell-Unterverzeichnissen hinzugefügt haben, können Sie in die SuperCalc.vcxproj-Datei schauen Wenn Sie den Editor verwenden, werden folgende Zeilen angezeigt:

 <ClCompile Include = "..\..\..\Source\Math\Matrix\matrix_multiply.cpp" />

Da es keine absoluten Pfade gibt, könnten Sie den gesamten SuperCalc-Verzeichnisbaum an einen anderen Ort verschieben, und alles würde weiterhin funktionieren. Umgebungsvariable Hacks wie $ (CURDIR) sind nicht erforderlich.

Ein letzter Hinweis: Da Sie Ihre Quelldateien in mehreren Verzeichnissen ablegen, können Probleme mit den Kopfzeilen #include, den .h- oder .hpp-Dateien, auftreten. Sie müssen dem Compiler mitteilen, in welchen Verzeichnissen sich Ihre Header-Dateien befinden. Sie werden wahrscheinlich auf mehrere Verzeichnisse verteilt sein. Bearbeiten Sie daher die Projekteinstellungen: Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, wählen Sie Eigenschaften und navigieren Sie zu Konfigurationseigenschaften> C/C++> Allgemein. Das erste Feld im Eigenschaftenfenster lautet "Zusätzliche Include-Verzeichnisse". Bevor Sie etwas anderes tun , klicken Sie auf das Dropdown-Menü Konfiguration und wählen Sie Alle Konfigurationen. Wenn Sie sowohl einen 32-Bit- als auch einen 64-Bit-Build haben, klicken Sie auf das Dropdown-Menü Plattform und wählen Sie Alle Plattformen. Gehen Sie nun zu "Zusätzliche Include-Verzeichnisse" und fügen Sie alle Pfade zu allen Quellverzeichnissen hinzu, wobei die Pfade relativ zum Verzeichnis der Projektdatei angegeben werden. Für das SuperCalc-Beispiel würde es also so aussehen:

 ..\..\..\Source\Input; ..\..\..\Source\Math; ..\..\Source\Math\Matrix; .. \. .\..\Source\Output 

Sobald diese Änderung vorgenommen wurde, kann eine Datei wie Source\Math\Matrix\matrix_multiply.cpp eine Zeile enthalten

#include "input_configuration.hpp"

um eine Datei aus dem Eingabeverzeichnis einzuschließen, und es wird alles nur funktionieren.

(Wenn es nicht alles nur funktioniert, ist der übliche Ansatz, in die Projekteigenschaften zurückzukehren und mit der Anzahl der ..\ Sequenzen vor Ihren zusätzlichen Include-Verzeichnissen zu fummeln. Denken Sie daran dass Sie jedes Mal, wenn Sie eine Änderung vornehmen, Alle Konfigurationen erneut auswählen müssen - ansonsten gelten Ihre Änderungen nur für die aktuelle Konfiguration (Debug oder Release) Einstellung ist nicht klebrig .)

148
librik

Es ist tatsächlich IS möglich, die physische Dateistruktur mit Visual Studio anzuzeigen (und zu bearbeiten), wie in this SO post

Header-/Quelldatei ist keine Anforderung von Visual Studio . Dies ist nur das Standardlayout und es ist virtuell, nicht physisch. Wenn du Klicken Sie im Projektmappen-Explorer auf "Alle Dateien anzeigen". Daraufhin wird ".__" angezeigt. Ordnerstruktur wie auf der Festplatte, die Sie als .__ bearbeiten können. du siehst fit.

23
morgancodes

Ich bin spät dran, aber ich rate ab die akzeptierte Antwort. Der Hauptgrund für Code Portabilität. Stattdessen empfehle ich:

  1. So erstellen Sie das Layout von Ordnern und Unterordnern außerhalb von Visual Studio (identisch mit der akzeptierten Antwort, die nächsten Punkte unterscheiden sich jedoch). Erstellen Sie in jedem Unterordner einen Ordner include und src
  2. Fügen Sie dann unter Konfigurationseigenschaften> C/C++> Allgemein> "Zusätzliche Include-Verzeichnisse" (für alle Konfigurationen und alle Plateforms) den Ordner single hinzu, der die Basis aller Unterordner ist.
  3. Hinzufügen von src-Dateien und Einschließen von Dateien in diese Unterordner.

  4. Schließen Sie abschließend jede Header-Datei mit Relatives Pfaden zu diesem Basisordner ein.

Um es klar zu sagen: Wenn das Layout Ihres Projekts wie folgt ist:

MyProjet
   Math
     include
       random.h
       functions.h
     src
       random.cpp
       functions.cpp
   Probability
      include
        normal.h
      src
        normal.cpp

sie sollten in functions.cpp die folgende include-Anweisung haben:

#include"Math/include/functions.h"

wenn Sie auch den Code normal in functions.cpp verwenden müssen, sollte der obere Rand von functions.cpp folgendermaßen aussehen:

#include"Math/include/functions.h"
#include"Probability/include/normal.h"

Auf diese Weise können Sie Ihren Math-Unterordner problemlos in einem anderen Projekt (B) wiederverwenden: Fügen Sie einfach den Basisordner MyProject zu den "Additional Include Directories" von Projekt B hinzu.

Der Schlüsselpunkt ist, nur eins Basisordner in der Eigenschaft "Zusätzliche Include-Verzeichnisse" zu haben.

ps: Die Intellisense-Funktion von VS 2015 hilft beim Schreiben des #include...

1
Malick

Die Verwendung eines Build-Systems wie CMake oder Premake kann beim Organisieren von Dateien hilfreich sein und hat den zusätzlichen Vorteil, dass Sie Ihren Code auf andere Plattformen portieren können. Hier ist eine gute Präsentation zum Thema.

Da dies für jemanden hilfreich sein könnte, sollte ich hinzufügen, dass das Separieren der Quelldateien von Ihrer Projektdatei (*.vcxproj) das Erstellen neuer Dateien erschwert, da Visual Studio standardmäßig neue Dateien im gleichen Ordner erstellen möchte dein Projekt. Die Lösung für dieses Problem, die ich bisher gefunden habe, ist die Verwendung der Visual Assists-Erweiterung, da neue Dateien relativ zum Verzeichnis oder der aktuell geöffneten Datei hinzugefügt werden können. Siehe this post für weitere Erklärungen.

0
Adelost