D'où vient gcc look pour le C et le C++ fichiers d'en-tête?
Sur un système Unix, où gcc recherchez les fichiers d'en-tête?
J'ai passé un peu de temps ce matin à la recherche pour certains systèmes de fichiers d'en-tête, alors j'ai pensé que ce serait bon à savoir ici.
Vous devez vous connecter pour publier un commentaire.
Cette commande demande de gcc qui C++ préprocesseur c'est à l'aide de, puis demande à ce que le préprocesseur d'où il regarde pour comprend.
Vous obtiendrez une réponse fiable pour votre installation spécifique.
De même, pour les C préprocesseur:
cpp
au lieu decc1
? Sur ma debian jessie$(gcc -print-prog-name=cpp) -v
(correctement) donne un plus de chemin, qui est/usr/include/x86_64-linux-gnu
/dev/null
, donc`gcc -print-prog-name=cc1` -v < /dev/null
.Ctrl
+D
, qui envoie "fin de fichier" en Unix-parler.gcc
oug++
programme) l'emporte sur les chemins de recherche compilé dans le préprocesseur. Par exemple, sur l'ordinateur, je suis en train de taper ceci, cette recette omet/usr/include/x86_64-linux-gnu
du chemin de recherche.En outre, la gcc va le chercher dans les répertoires spécifiés après la
-I
option.Vous pouvez créer un fichier qui tente d'inclure un système de faux en-tête.
Si vous exécutez gcc en mode verbose sur une telle source, il donnera la liste de tous les système d'inclure les emplacements qu'il regarde pour le faux-tête.
echo "#include <bogus.h>" | gcc -v -x c -
gcc -v -E - < /dev/null
oucpp -v < /dev/null
sont assez. Vous avez juste à obtenir le préprocesseur à exécuter, il n'est pas question d'entrée qu'il voit. (Les chemins de recherche sont imprimés lors du démarrage, avant même qu'elle ressemble à son entrée.)La RPC, Article de la Manuel de GCC indique que les fichiers d'en-tête peuvent être situés dans les répertoires suivants:
Pour obtenir GCC pour imprimer l'ensemble de répertoires où il va chercher du système d'en-têtes, appelez-le comme ceci:
qui va produire une sortie de la forme
Si vous avez
-I
-famille des options sur la ligne de commande de leur incidence pour ce qui est imprimé.(Le
sed
de commande est de se débarrasser de tous les autres indésirable de cette invocation, imprime, et laLC_ALL=C
est de s'assurer que lesed
commande fonctionne -- la "commence ici" et "Fin de la liste de recherche de" phrases sont traduit IIRC.)L'ensemble des chemins d'accès où le compilateur recherche pour les fichiers d'en-tête peut être contrôlé par la commande:-
rpc -v
Si vous déclarez #include "" , le compilateur recherche d'abord dans le répertoire courant du fichier source et si elle ne trouve pas, toujours à la recherche de ci-dessus (extrait répertoires.
Si vous déclarez #include <> , le compilateur recherche directement dans les répertoires obtenu à partir de la commande ci-dessus.
Source:- http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026
On pourrait considérer les (autres) comprennent voie pour un programme C de bash par la vérification de la manière suivante:
Si c'est vide, il peut être modifié pour ajouter de la valeur par défaut inclure les emplacements, par:
Ce sont les répertoires qui gcc regarde par défaut spécifié fichiers d'en-tête ( étant donné que les fichiers d'en-tête sont inclus dans les chevrons <>);
1. /usr/local/include/--utilisé pour la 3e partie de l'en-tête des fichiers.
2. /usr/include/-- utilisé pour le système de fichiers d'en-tête.
Si dans le cas où vous décidez de mettre votre fichier d'en-tête personnalisé dans un lieu autre que les répertoires mentionnés plus haut, vous pouvez les inclure comme suit:
1. à l'aide de guillemets ("./custom_header_files/foo.h") avec le chemin d'accès aux fichiers, au lieu de chevrons de l'instruction include.
2. en utilisant le commutateur-I lors de la compilation du code.
gcc -I /home/utilisateur/custom_headers/-c foo.c -p toto.o
Fondamentalement, le commutateur-I indique au compilateur de regarder d'abord dans le répertoire spécifié avec le commutateur-I ( avant il vérifie les répertoires standard).Lorsque vous utilisez le commutateur-I, les fichiers d'en-tête peut être inclus à l'aide de chevrons.