2 votes

Comment indiquer au préprocesseur de rechercher un dossier particulier pour les fichiers d'en-tête, lorsque je dis #include <xyz.h>.

J'ai environ 120 fichiers d'en-tête (fichiers .h), et dans chacun d'entre eux, chacun inclut de nombreux autres fichiers d'en-tête utilisant le format #include <abcd/xyz.h> mais comme j'ai gardé les fichiers .h dans un dossier spécifique, le préprocesseur génère l'erreur filenotfound.

J'ai déplacé tous les fichiers .h vers le seul fichier .C qui appelle le premier fichier d'en-tête.

Une façon de procéder est de faire #include <abcd/xyz.h> como #include "abcd/xyz" mais je dois le faire dans tous les fichiers d'en-tête où il y a une déclaration d'inclusion, et il y en a des centaines.

Je ne peux pas inclure beaucoup d'entre eux dans la section des fichiers d'en-tête de Visualstudio parce que certains d'entre eux portent le même nom, mais se trouvent dans des répertoires différents. ( <abcd/xyz.h> , <efgh/xyz.h> ).

Y a-t-il un moyen de le faire ?

4voto

sharptooth Points 93379

Vous devez ajouter un chemin dans "Additional include directories" dans la section "C++" des options du projet (l'onglet "General"). Vous pouvez utiliser des variables d'environnement ainsi que les raccourcis "this folder" (.) et "up one folder" (..) pour que ce paramètre ne soit pas lié à une certaine structure de répertoire.

2voto

sean e Points 6857

et je ne peux pas en inclure beaucoup dans la section des fichiers d'en-tête de Visualstudio parce que certains d'entre eux ont le même nom, mais se trouvent dans des répertoires différents.(,)

C'est un gros problème, sauf si les fichiers qui incluent ces en-têtes au nom non unique se trouvent dans le même répertoire que les fichiers d'en-tête eux-mêmes.

Vous n'avez aucun moyen de garantir que le compilateur localisera un en-tête avant un autre sans modifier la directive #include elle-même (et ajouter un chemin relatif, par exemple).

EDIT : Il semble que Visual Studio vous permettra de spécifier différents répertoires d'inclusion supplémentaires pour chaque fichier source dans un projet (rt-cliquez sur le fichier source dans l'explorateur de solutions et modifiez les propriétés C/C++). Mais je pense que ce serait plus de travail que de modifier les directives #include elles-mêmes - cela dépend du nombre de noms de fichiers d'en-tête non uniques que vous avez.

0voto

James Devlin Points 6699

Dans les paramètres du projet (sous C/C++ dans VS2005/2008), il y a une option pour les "répertoires d'inclusion supplémentaires". Vous pouvez y ajouter les dossiers contenant vos fichiers d'en-tête, en utilisant des chemins relatifs.

Vous pouvez également le faire au niveau de l'IDE dans Outils -> Options -> Projets et solutions -> Répertoires VC++ -> Fichiers inclus. En général, cette méthode est réservée aux en-têtes inclus dans le cadre d'une bibliothèque formelle. La première option est généralement préférée car elle est portable (vous pouvez envoyer votre fichier de projet à un autre développeur et, à condition que vous utilisiez des chemins relatifs/macro, il peut construire le projet tel quel).

0voto

LB40 Points 4372

Ce que vous recherchez est le drapeau -I et vous donnez le répertoire... Si vous avez un Makefile, vous devriez l'ajouter au CPP_FLAGS quelque chose comme ça....

0voto

ralphtheninja Points 24346

Vous pouvez également ajouter une variable INCLUDE à vos variables d'environnement.

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