Sie sind ein wenig verwirrt darüber, wie Visual Studio mit C ++ - Dateien funktioniert, 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 keinen Bezug zur Anordnung der Dateien auf Ihrer Festplatte. Dateien und Ordner sind eigentlich nicht "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, teilen Sie dem Projekt lediglich mit, wo sich die Datei auf der Festplatte befindet.
Lassen Sie uns mit einem bestimmten Beispiel arbeiten und ich zeige Ihnen, wie ich es organisieren würde. Angenommen, Sie erstellen ein Grafikrechnerprogramm namens SuperCalc . Sie haben einen Quellordner und erstellen dann Ordner innerhalb von Source, um die verschiedenen Dateien zu speichern. Angenommen, die von Ihnen erstellten Ordner sind:
SuperCalc\Source\Input
SuperCalc\Source\Math
SuperCalc\Source\Math\Matrix
SuperCalc\Source\Output
Sie haben 3 Verzeichnisse von Source
: Input
, Output
, und Math
. Das Math
Unterverzeichnis hat ein Unterverzeichnis namens Matrix
. Sie haben CPP-Dateien in Eingabe, Mathematik, Matrix und Ausgabe. Sie erstellen diese Verzeichnisse (Ordner) mit dem Windows Explorer oder der Eingabeaufforderung.
Jetzt möchten Sie auch eine Lösungsdatei ( SuperCalc.sln
) und eine Projektdatei ( SuperCalc.vcxproj
& SuperCalc.vcxproj.filters
) erstellen . Tun Sie dies 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 irgendwo in derselben Verzeichnisstruktur (Ordnerbaum) wie der Quellcode befinden. Ich würde vorschlagen, es neben das Quellverzeichnis zu stellen, in:
Gehen Sie in VS und wählen Sie File > New > Project > Visual Studio Solutions > Blank Solution File
. Geben Sie der Lösung einen Namen (möglicherweise "SuperCalc") und einen Speicherort (den Speicherort, den wir gerade im SuperCalc\Build
Verzeichnis ausgewählt haben). Es wird die Lösungsdatei für Sie erstellen.
Klicken Sie nun im Projektmappen-Explorer mit der rechten Maustaste auf die Lösung ("Solution SuperCalc, 0 Projekte") und wählen Sie Add > New Project
. Wählen Sie einen Namen - dies ist der Name Ihrer ausführbaren Programmdatei, wie "SuperCalc"! Wählen Sie Win32 , entweder Win32 Console Application (dies ist ein DOS-Konsolenprogramm) oder Win32 Project (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 ich nicht möchte, dass Visual Studio Dateien und Code für mich erstellt, es sei denn, ich sage es. 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 (Ordnerbaum), in der sich Ihr Quellcode befindet, außerhalb von Visual Studio erstellt. 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. Obwohl sie aus verschiedenen Verzeichnissen (Eingabe, Matrix usw.) stammen, besteht keine erforderliche Beziehung zwischen den Speicherorten der Dateien auf der Festplatte und ihrem Erscheinungsbild im Projekt. Wenn Sie jedoch viele Dateien haben, ist es einfacher, "Unterfilter" zu erstellen, Filter innerhalb des Quelldateifilters zu erstellen und ihnen die Namen der Unterordner von Source zu geben. Auf diese Weise replizieren Sie die Struktur Ihrer Festplattenverzeichnisse in Ihrer Projektdatei.
Klicken Sie mit der rechten Maustaste auf den Quelldateifilter des "SuperCalc" -Projekts 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 Math
Filter 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
Quelldaten
Eingang
Mathematik
Matrix
Ausgabe
Dies entspricht den Verzeichnissen (Ordnern), die Sie zuvor erstellt haben. 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 in den richtigen Filter eingefügt. Sie müssen ihm sagen, wo er es ablegen soll.
Um Ihre CPP-Dateien hinzuzufügen oder zu erstellen, wählen Sie den Filternamen aus, der dem Verzeichnis entspricht, in dem sich die CPP-Datei befindet. Um eine Datei hinzuzufügen oder zu erstellen SuperCalc\Source\Math\Matrix\matrix_multiply.cpp
, klicken Sie Matrix
im Projektmappen-Explorer mit der rechten Maustaste auf den Filter und wählen Sie Hinzufügen> Neue Datei hinzufügen oder Vorhandene Datei hinzufügen . (Vorhandene Datei hinzufügen ist gedacht, wenn Sie bereits matrix_multiply.cpp geschrieben haben und dem Projekt nur mitteilen möchten, wo es sich befindet.) Verwenden Sie das Dialogfeld, um zum Source\Math\Matrix
Verzeichnis 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), mit dem ich den Quelldateiordner einschließen könnte, 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 erstellt haben SuperCalc.sln
und SuperCalc.vcxproj
wo ich vorgeschlagen habe (das SuperCalc\Build
Verzeichnis) und Ihre CPP-Dateien in den Quell-Unterverzeichnissen hinzugefügt haben, können Sie mit Notepad in die Datei SuperCalc.vcxproj schauen und sehen folgende Zeilen:
<ClCompile Include = ".. \ .. \ .. \ Source \ Math \ Matrix \ matrix_multiply.cpp" />
Da es keine absoluten Pfade gibt, können Sie den gesamten SuperCalc-Verzeichnisbaum an einen anderen Ort verschieben, und alles würde immer noch funktionieren. Keine Notwendigkeit für umgebungsvariable Hacks wie $ (CURDIR).
Eine letzte Sache, die Sie wissen sollten: Da Sie Ihre Quelldateien in mehreren Verzeichnissen #include
ablegen, können Probleme mit den Headern, 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 also die Projekteinstellungen: Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, wählen Sie Eigenschaften und führen Sie einen Drilldown zu Konfigurationseigenschaften> C / C ++> Allgemein durch. Das erste Feld im Eigenschaftenblatt 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 "Additional Include Directories" 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; .. \ .. \ .. \ Quelle \ Ausgabe
Sobald diese Änderung vorgenommen wurde, kann eine Datei wie Source \ Math \ Matrix \ matrix_multiply.cpp eine Zeile enthalten
#include "input_configuration.hpp"
# eine Datei aus dem Eingabeverzeichnis einschließen, und alles wird einfach funktionieren.
(Wenn nicht alles nur funktioniert, gehen Sie normalerweise zu den Projekteigenschaften zurück und spielen Sie mit der Anzahl der ..\
Sequenzen vor Ihren zusätzlichen Include-Verzeichnissen. Denken Sie daran, dass Sie bei jeder Änderung alle Konfigurationen auswählen müssen wieder - andernfalls gelten Ihre Änderungen nur für die aktuelle Konfiguration (Debug oder Release). Diese Einstellung bleibt nicht erhalten .)