Vous êtes un peu confus au sujet de la façon dont Visual Studio fonctionne avec les fichiers de C++, mais c'est OK, étant donné que la documentation est moche. Tout d'abord: à la différence avec le C# ou le Java, l'organisation des fichiers dans le projet n'a aucun rapport avec l'organisation des fichiers sur votre disque. Les fichiers et les dossiers ne sont pas "dans" le projet, vraiment; le projet ne répertorie que les noms et les chemins d'accès des fichiers et des dossiers, qui ont déjà présentes sur votre disque.
En général, vous créez la mise en page de dossiers avec les fichiers source à l'intérieur de ces dossiers. Vous faites cela en dehors de Visual Studio. Vous pouvez également créer un fichier de projet. Lorsque vous "ajouter un fichier" pour le projet, tout ce que vous faire est de dire le projet où trouver le fichier sur le disque.
Nous allons travailler sur un exemple et je vais vous montrer comment j'allais organiser. Supposons que vous effectuez une calculatrice graphique programme appelé SuperCalc. Vous aurez un dossier Source, puis de créer des dossiers à l'intérieur de la Source de tenir les différents fichiers. Supposons que les dossiers que vous créez sont:
SuperCalc\Source\Input
SuperCalc\Source\Math
SuperCalc\Source\Math\Matrix
SuperCalc\Source\Output
Vous avez 3 sous - Source
: Input
, Output
, et Math
. L' Math
sous-répertoire a un sous-répertoire appelé Matrix
. Vous aurez .rpc fichiers en Entrée, des Mathématiques, de la Matrice et de la Sortie. Vous allez créer ces répertoires (dossiers) à l'aide de l'Explorateur Windows ou l'Invite de Commande.
Maintenant, vous voulez créer un fichier de solution (SuperCalc.sln
) et un fichier de projet (SuperCalc.vcxproj
& SuperCalc.vcxproj.filters
). Le faire à l'intérieur de Visual Studio. Habituellement, le fichier de projet de vie dans un sous-dossier de la solution d'annuaire; ceci sera fait automatiquement pour vous par Visual Studio. Choisissez un emplacement pour le
solution fichier -- il doit être quelque part dans la structure de répertoire (dossier de l'arbre) que le code source. Je suggère de le mettre à côté du répertoire Source, dans:
Aller dans VS et choisissez File > New > Project > Visual Studio Solutions > Blank Solution File
. Donner la solution d'un nom (peut-être "SuperCalc") et un lieu (l'endroit, nous avons juste pris dans l' SuperCalc\Build
répertoire). Il va créer le fichier de solution pour vous.
Maintenant, cliquez-droit sur la solution dans l'Explorateur de solutions ("Solution SuperCalc, 0 projets"), et choisissez Add > New Project
. Choisir un nom, tel sera le nom de votre programme exécutable, comme "SuperCalc"! Choisissez Win32, soit Win32 Console Application (c'est un DOS-programme de console) ou Win32 Projet (c'est un Windows ordinaire programme GUI). Habituellement je puis cliquez sur Paramètres de l'Application à faire quelques changements importants: d'une part, je prends Projet Vide parce que je ne veux pas Visual Studio de création de fichiers et de code pour moi, sauf si je lui dis de. Lorsqu'il est configuré de la façon dont je le veux, je clique sur TERMINER.
Maintenant vous avez votre fichier de solution et le projet, créé par Visual Studio. Vous avez également à votre code source, ou au moins la structure de répertoire (dossier de l'arbre) où votre code source sera, créé en dehors de Visual Studio. Il est temps de relier ces deux choses ensemble.
Si vous le vouliez, vous pourriez obtenir la liste des fichiers source dans les Fichiers Source de filtre de votre projet. Même si ils viennent de différents répertoires (Entrée, Matrix, etc.), il n'y a pas de lien nécessaire entre les emplacements des fichiers sur le disque et leur apparition dans le projet. Mais si vous avez beaucoup de fichiers, il est plus facile si vous créer des "sous-filtres, filtres à l'intérieur de la Source des Fichiers du filtre, et de leur donner les noms des sous-dossiers de la Source. De cette façon, vous répliquer la structure de votre disque répertoires à l'intérieur de votre fichier de projet.
Cliquez-droit sur les Fichiers Source de filtre de la "SuperCalc" du projet, et choisissez Ajouter > Ajouter un Nouveau Filtre. Donnez-lui le nom Input
(la première de la SuperCalc\répertoires Source). Également créer des filtres Math
et Output
. Cliquez-droit sur l' Math
filtre et choisissez Ajouter > Ajouter un Nouveau Filtre, afin de créer un sous-filtre appelé" Matrix
(à l'intérieur de Math). Maintenant que vous avez ces filtres:
SuperCalc
Les Fichiers Source
Entrée
Mathématiques
La matrice
Sortie
ce qui correspond à la des répertoires (dossiers) que vous avez créé plus tôt. C'est purement une disposition confortable pour les humains. Visual Studio n'est pas à comprendre quelque chose de spécial à ce sujet. Si vous venez de dire VS "ajouter un fichier" cela ne peut pas mettre le fichier dans le bon filtre. Vous aurez à lui dire où le mettre.
Pour ajouter ou créer votre .rpc fichiers, sélectionnez le nom du filtre correspondant au répertoire où le .fichier cpp. Donc, d'ajouter ou de créer un fichier SuperCalc\Source\Math\Matrix\matrix_multiply.cpp
, cliquez-droit sur l' Matrix
filtre dans l'Explorateur de solutions et choisissez Ajouter > Ajouter un Nouveau Fichier ou Ajouter un Fichier Existant. (Ajouter un Fichier Existant est pour quand vous avez déjà écrit matrix_multiply.cpp et vous voulez juste pour dire que le projet où c'est). Utilisez la boîte de dialogue pour naviguer jusqu'à l' Source\Math\Matrix
répertoire. Répétez ce processus pour tous les fichiers source dans l'ensemble de votre programme.
Vous avez aussi eu la question "est-il quelque chose de similaire à $(CURDIR) que je pourrais utiliser pour inclure le dossier du fichier source sans avoir besoin d'un chemin d'accès absolu?" Vous avez de la chance: des projets Visual Studio ne pas utiliser des chemins absolus! Ils utiliser des chemins relatifs. Le fichier de projet stocke le chemin d'accès relatif requis pour obtenir à partir du répertoire contenant le .vcxproj fichier dans le répertoire contenant le fichier source. Donc, si vous avez créé SuperCalc.sln
et SuperCalc.vcxproj
où je l'ai suggéré ( SuperCalc\Build
répertoire), et vous ajoutez votre .fichiers cpp à la source des sous-répertoires, vous pouvez aller regarder à l'intérieur de la SuperCalc.vcxproj fichier à l'aide du bloc-notes, et vous verrez des lignes comme:
<ClCompile Inclure="..\..\..\Source\Math\Matrix\matrix_multiply.cpp" />
Depuis il n'y a pas de chemins d'accès absolus, vous pourriez prendre l'ensemble de la SuperCalc arborescence de répertoires et de déplacer quelque part d'autre, et il en aurait encore du travail. Pas besoin de la variable d'environnement hacks comme $(CURDIR).
Une dernière chose à savoir: depuis vous de mettre vos fichiers dans plusieurs répertoires, vous pourriez avoir des problèmes avec #include
ing en-têtes, les .h ou .php les fichiers. Vous devez indiquer au compilateur les répertoires où vos fichiers d'en-tête sont situés. Ils seront probablement dispersées entre plusieurs répertoires. Afin de modifier les paramètres du projet: cliquez-droit sur le nom du projet dans l'Explorateur de solutions, sélectionnez Propriétés, et de forage vers le bas dans les Propriétés de Configuration > C/C++ > Général. Le premier champ dans la feuille de propriétés, dit "d'autres Répertoires include". Avant de faire quoi que ce soit d'autre, cliquez sur le menu déroulant Configuration et choisissez Toutes les Configurations. Si vous avez à la fois 32 bits et 64 bits, cliquez sur la Plate-forme de menu déroulant et choisissez Toutes les plates-formes. Maintenant, allez dans les "Autres Répertoires include" et ajoutez tous les chemins d'accès à tous les répertoires source, avec les chemins spécifiés par rapport au projet de répertoire du fichier. Donc, pour le SuperCalc exemple, il devrait ressembler à:
..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrice;..\..\..\Source\Sortie
Une fois cette modification effectuée, un fichier comme Source\Math\Matrix\matrix_multiply.cpp peut avoir un
ligne
#include "input_configuration.hpp"
pour #include d'un fichier à partir du répertoire d'Entrée, et il sera Tout Simplement Travailler.
(Si ce n'est pas Seulement le Travail, l'approche habituelle consiste à aller dans les Propriétés du Projet et jouer avec le nombre d' ..\
des séquences en face de vos autres Répertoires include. Rappelez-vous que chaque fois que vous aller faire un changement, vous devez choisir Toutes les Configurations de nouveau, sinon vos modifications ne s'appliquent qu'à la Configuration actuelle (Debug ou Release). Ce paramètre est non collante.)