125 votes

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

Je travaille sur un jeu en utilisant Visual C++. Certains composants se trouvent dans des projets distincts, et j'ai défini les dépendances du projet. Comment puis-je #inclure un fichier d'en-tête d'un autre projet ? Je n'ai aucune idée de la manière d'utiliser les classes d'un projet dans un autre.

224voto

LeopardSkinPillBoxHat Points 11851

Paramètres du compilateur

Dans le projet où vous voulez #inclure le fichier d'en-tête de un autre vous devrez ajouter le chemin d'accès au fichier d'en-tête dans la section Répertoires d'inclusion supplémentaires dans la configuration du projet.

Pour accéder à la configuration du projet :

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

Comment inclure

A inclure le fichier d'en-tête il suffit d'écrire ce qui suit dans votre code :

#include "filename.h"

Notez que vous n'avez pas besoin de spécifier le chemin d'accès ici, car vous incluez déjà le répertoire dans les répertoires d'inclusion supplémentaires, de sorte que Visual Studio saura où le chercher.

Si vous ne voulez 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 point, et ensuite #include relatif à 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

Réglage pour le linker

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

  1. Cliquez avec le bouton droit de la souris sur le projet, puis sélectionnez Propriétés.
  2. Sélectionnez Configuration Properties->Linker->Input
  3. Saisissez la bibliothèque sous Dépendances supplémentaires.

11 votes

Permettez-moi de dire qu'après une matinée à lire des réponses sur ce sujet sur SO, la vôtre est la plus claire et la plus complète que j'aie trouvée. Bravo et merci !

12 votes

Un utilisateur anonyme a suggéré : "Lorsque vous incluez le chemin de la bibliothèque, assurez-vous de le mettre entre guillemets si le chemin comporte des espaces". Je l'ajoute en commentaire, si cela peut aider quelqu'un.

2 votes

Une autre façon d'inclure une bibliothèque statique est, dans les "dépendances du projet" de la solution, de configurer le projet pour qu'il soit une dépendance de la bibliothèque statique à lier. Il m'a fallu des années pour comprendre pourquoi l'un de mes projets se liait correctement et l'autre non - voilà pourquoi.

11voto

Benav Points 126

Puisque 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 le document suivant https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp-projects?view=vs-2019 :

  1. L'include peut être écrit dans un chemin relatif (E.g. #include "../libProject/libHeader.h" ).
  2. Pour le linker, faites un clic droit sur "Références", cliquez sur Ajouter une référence, et choisissez l'autre projet.

0 votes

C'est simple et agréable, mais c'est dommage que le chemin relatif soit nécessaire partout où l'on inclut un en-tête.

0 votes

IMO, c'est la meilleure réponse. Le chemin relatif peut être plus simple si vous ajoutez "../libProject" aux chemins d'inclusion : (VS2015) properties / "C/C++" / chemins d'inclusion supplémentaires

9voto

yoyo Points 802

En développant la réponse de @Benav, ma méthode préférée est la suivante :

  1. Ajoutez le répertoire de la solution à vos chemins d'inclusion :
    • cliquez à droite 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 menus déroulants.
    • sélectionnez C/C++ > Général
    • ajouter $(SolutionDir) dans les répertoires d'inclusion supplémentaires
  2. Ajoutez des références à chaque projet que vous souhaitez utiliser :
    • cliquez avec le bouton droit de la souris sur les références de votre projet dans l'explorateur de solutions.
    • sélectionnez Ajouter une référence...
    • sélectionnez le(s) projet(s) auquel(s) vous voulez faire référence

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

#include "OtherProject/Header.h"

Notes :

  • Cela suppose que votre fichier de solution est stocké dans un dossier supérieur à chacun de vos projets, ce qui est l'organisation par défaut lors de la création de projets avec Visual Studio.
  • Vous pouvez maintenant inclure tout à partir d'un chemin relatif au dossier de la 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 #include s, mais il définit les dépendances de construction correctes, ce que vous voulez probablement.

4voto

Assaf Lavie Points 20181

#include n'a rien à voir avec les projets - il dit simplement au préprocesseur "mettez 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 toutefois vous familiariser avec les bibliothèques (bibliothèques statiques/dynamiques) afin de pouvoir lier correctement de tels projets - mais c'est une autre question.

2voto

Rosstified Points 2327

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 dans les propriétés du projet et vous devriez le voir.

0 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X