#inclure les Fichiers d'en-Tête, Quand Ils Sont Dans un Répertoire Différent de la Structure
J'ai fait quelques recherches et trouvé similaires threads sur la bonne façon d'inclure les fichiers d'en-tête dans le C++, mais aucun d'entre eux tout à fait répondu à cette question.
Je sais que, pour inclure un en-tête de fichier dans un autre dossier, vous pouvez simplement utiliser la syntaxe suivante:
#include "../myFolder/myFile.h"
Mais qu'une fois le fichier dans un répertoire différent de la structure un peu loin?
Par exemple, si quelque chose comme ce qui suit est garanti pour être vrai:
Répertoire courant = /f1 /f2 /f3 /f4 /f5 /myFile.cpp
Souhaité en-tête directory = /f1 /d2 /d3 /d4 /d5 /d6 /myHeader.h
Je sais que vous pouvez définir les "include" de la propriété ou de l'utilisation d'un fichier de créer, mais j'aimerais savoir si il existe un moyen de le faire à partir de la #include
déclaration.
- Vous pouvez évidemment mettre tout chemin relatif ou absolu dans votre déclaration (que je ne recommande pas), mais je soupçonne que vous cherchez quelque chose d'un peu plus compact?
- Merci pour le commentaire! Je suis à la recherche pour voir si il y a un moyen de le faire et encore c'est relatif, de sorte qu'il n'a pas d'importance ce qui est au-dessus de la f1 (dans cet exemple) dans la structure de répertoire.
- Eh bien, vous les canettes de la chaîne ".."'s par exemple
#include ../../../../../../f2/f3/f4/f5/myFile.cpp
qui est si laid immédiatement, j'ai le regret de le taper. Je vous recommande l'établissement du chemin dans le fichier makefile. - Pourquoi les gens sont si prompts à rejeter la solution évidente? Les "include" est disponible pour une raison - de l'utiliser.
Vous devez vous connecter pour publier un commentaire.
mettre
".."
dans#include
est généralement considéré comme laid et difficile à maintenir.Chaque cohérente de la bibliothèque que vous utilisez (par exemple boost) a une unique racine des fichiers d'en-tête de la hiérarchie que vous devriez mettre dans votre "autres répertoires include" de la propriété. Pour boost c'est quelque chose comme
dans ce répertoire vous trouverez généralement un répertoire appelé
boost
où tous les en-têtes de vivre. Cela apporte de la convention que tous les boost en-têtes de démarrage:Cela vaut également pour le projet que vous écrivez. Vous devez décider quelle est la meilleure de la racine pour ses en-têtes et commencez à toutes les comprend à partir de là.
La seule exception à cette règle doit être en-têtes qui sont dans le même répertoire. Ceux-ci peuvent seulement être compris comme un nom de fichier
#include "same-dir-header.h"
Vous devez également faire la différence entre notamment avec
""
et<>
. Citations devraient être des choses dans votre projet, les crochets doivent être bibliothèques externes (ou, comme certains le voudraient - OS et des bibliothèques runtime C).h
fichiers relatifs à l'emplacement de la.h
fichier, et l'autre a évalué les mêmes comprennent par rapport à la.c
fichier. Les chemins d'inclusion sont le chemin à parcourir. Le problème de base est que le sens de..
et/
à inclure des directives sur la mise en œuvre est définie.Pour compléter la réponse de @shoosh, vous êtes censé dire à votre compilateur où sont ces "autres" fichiers d'en-tête. Avec gcc sous windows, si ils sont dans c:\path\to\library puis ajouter l'option-I
Méfiez-vous des espaces dans le chemin, si l'emplacement est
c:\my path\to\library
, puis:D'autres compilateurs offrent une option similaire, sur la ligne de commande ou par le biais de l'IDE.