visual c ++: #include des fichiers d'autres projets dans la même solution

113

Je travaille sur un jeu utilisant Visual C ++. J'ai quelques composants dans des projets séparés et j'ai défini les dépendances du projet. Comment #inclure un fichier d'en-tête d'un autre projet? Je ne sais pas comment utiliser les classes d'un projet dans un autre.

rlbond
la source

Réponses:

199

Paramètres du compilateur

Dans le projet dans lequel vous souhaitez #inclure le fichier d'en-tête d' un autre projet, vous devrez ajouter le chemin du fichier d'en-tête dans la section Inclure les répertoires supplémentaires dans la configuration du projet.

Pour accéder à la configuration du projet:

  1. Cliquez avec le bouton droit sur le projet et sélectionnez Propriétés.
  2. Sélectionnez Propriétés de configuration-> C / C ++ -> Général.
  3. Définissez le chemin sous Répertoires d'inclusion supplémentaires.

Comment inclure

Pour inclure le fichier d'en-tête , écrivez simplement ce qui suit dans votre code:

#include "filename.h"

Notez que vous n'avez pas besoin de spécifier le chemin ici, car vous incluez déjà le répertoire dans les répertoires d'inclusion supplémentaires, afin que Visual Studio sache où le rechercher.

Si vous ne souhaitez pas ajouter chaque emplacement de fichier d'en-tête dans les paramètres du projet, vous pouvez simplement inclure un répertoire jusqu'à un certain point, puis #include par rapport à ce point:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

Paramètre pour l'éditeur de liens

Si vous utilisez des bibliothèques statiques (c.-à-d. Un fichier .lib), vous devrez également ajouter la bibliothèque à l'entrée de l'éditeur de liens, de sorte qu'au moment de la liaison, les symboles puissent être liés (sinon vous obtiendrez un symbole non résolu):

  1. Cliquez avec le bouton droit sur le projet et sélectionnez Propriétés.
  2. Sélectionnez Propriétés de configuration-> Linker-> Entrée
  3. Entrez la bibliothèque sous Dépendances supplémentaires.
LéopardPeau
la source
6
Puis-je simplement dire qu'après une matinée de lecture des réponses à ce sujet sur les SO, les vôtres sont les plus claires et les plus complètes que j'ai rencontrées. Bravo et merci!
David Hall
9
Il y avait une suggestion d'un utilisateur anonyme comme, "Lorsque vous incluez le chemin de la bibliothèque, assurez-vous de les entrer entre guillemets si le chemin contient des espaces". L'ajouter en commentaire, si cela aide quelqu'un.
iDev
2
Une autre façon d'inclure une bibliothèque statique est, dans les «dépendances de projet» de la solution, de configurer le projet pour qu'il devienne une dépendance de la bibliothèque statique à laquelle lier. Il m'a fallu des années pour comprendre pourquoi l'un de mes projets était lié correctement et l'autre n'était pas - c'était pourquoi.
Stuart Wood
3
Je tiens à souligner que l'utilisation de "répertoires d'inclusion supplémentaires" avec le répertoire de fichiers source de l'autre projet peut être une mauvaise idée. L'autre projet peut avoir des fichiers avec les mêmes noms (très probablement si vous utilisez des en-têtes pré-compilés pour chacun). Personnellement, je préfère ajouter le dossier parent des fichiers sources des projets, afin que vous puissiez au moins vous spécifier, par exemple #include "proj2\include.h". Avoir plusieurs projets par solution semble très orienté vers les langages NET, car ils sont utilisés très différemment. Pourtant, trouver un excellent moyen de surmonter cela pour les projets C ++.
Deji
18
C'est un peu de mauvaise qualité. VS peut faire beaucoup automatiquement. Difficile de croire qu'il n'y a pas de meilleure solution que le codage en dur du chemin - le réglage de la dépendance du projet ou autre pourrait être bien.
Cookie du
4

#includen'a rien à voir avec les projets - il dit simplement au préprocesseur "mettre le contenu du fichier d'en-tête ici". Si vous lui donnez un chemin qui pointe vers l'emplacement correct (peut être un chemin relatif, comme ../votre_fichier.h), il sera inclus correctement.

Vous devrez cependant vous renseigner sur les bibliothèques (bibliothèques statiques / dynamiques) pour que ces projets se lient correctement - mais c'est une autre question.

Assaf Lavie
la source
3

Étant donné que les deux projets sont sous la même solution, il existe un moyen plus simple pour les fichiers d'inclusion et l'éditeur de liens, comme décrit dans https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- projets? view = vs-2019 :

  1. L'inclusion peut être écrite dans un chemin relatif (par exemple #include "../libProject/libHeader.h").
  2. Pour l'éditeur de liens, faites un clic droit sur "Références", cliquez sur Ajouter une référence et choisissez l'autre projet.
Benav
la source
Sympa et simple, mais c'est dommage que le chemin relatif soit nécessaire partout où vous incluez un en-tête.
yoyo le
2

Vous devez définir le chemin d'accès aux en-têtes dans les propriétés du projet afin que le compilateur y regarde lorsqu'il tente de trouver le (s) fichier (s) d'en-tête. Je ne me souviens pas de l'emplacement exact, mais regardez bien les propriétés du projet et vous devriez le voir.

Rosstifié
la source
L'emplacement peut être sous Propriétés> C / C ++> Général> Répertoires d'inclusion supplémentaires.
Mustafa Kemal
0

Essayez d'éviter les références de chemin complètes dans la directive #include, qu'elles soient absolues ou relatives. Au lieu de cela, ajoutez l'emplacement du dossier d'inclusion de l'autre projet dans les paramètres de votre projet. Utilisez uniquement des sous-dossiers dans les références de chemin lorsque cela est nécessaire. De cette façon, il est plus facile de déplacer les choses sans avoir à mettre à jour votre code.

cdonner
la source
0

En développant la réponse de @ Benav, mon approche préférée est de:

  1. Ajoutez le répertoire de solution à vos chemins d'inclusion:
    • faites un clic droit sur votre projet dans l'Explorateur de solutions
    • sélectionnez Propriétés
    • sélectionnez Toutes les configurations et Toutes les plates-formes dans les listes déroulantes
    • sélectionnez C / C ++> Général
    • ajouter $(SolutionDir)aux répertoires d'inclusion supplémentaires
  2. Ajoutez des références à chaque projet que vous souhaitez utiliser:
    • faites un clic droit sur les références de votre projet dans l'Explorateur de solutions
    • sélectionnez Ajouter une référence ...
    • sélectionnez le ou les projets auxquels vous souhaitez vous référer

Vous pouvez maintenant inclure les en-têtes de vos projets référencés comme ceci:

#include "OtherProject/Header.h"

Remarques:

  • Cela suppose que votre fichier de solution est stocké un dossier au-dessus de chacun de vos projets, qui est l'organisation par défaut lors de la création de projets avec Visual Studio.
  • Vous pouvez maintenant inclure n'importe quel fichier d'un chemin relatif au dossier de solution, ce qui n'est peut-être pas souhaitable, mais pour la simplicité de l'approche, je suis d'accord avec cela.
  • L'étape 2 n'est pas nécessaire pour #includes, mais elle définit les dépendances de construction correctes, ce que vous souhaitez probablement.
yo-yo
la source