Lorsque je compile un fichier source très simple avec gcc, je n'ai pas à spécifier le chemin d'accès aux fichiers d'inclusion standard tels que stdio ou stdlib.
Comment GCC sait-il comment trouver ces fichiers?
Le /usr/include
chemin est-il câblé à l'intérieur, ou il obtiendra les chemins d'autres composants du système d'exploitation?
cpp -v /dev/null -o /dev/null
Il existe une commande avec une sortie plus courte, qui permet de couper automatiquement les chemins d'inclusion des lignes, en commençant par un seul espace:
Le mérite revient à la page d'accueil de libc ++ .
la source
Bien que je sois d'accord avec la réponse d'Ihor Kaharlichenko pour considérer C ++ et avec la réponse d'abyss.7 pour la compacité de sa sortie, elles sont encore incomplètes pour les versions multi-arch de gcc car le traitement des entrées dépend des paramètres de ligne de commande et des macros.
Exemple:
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\ - -fsyntax-only
rendementsalors que
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-only
donneLa première invocation utilise
newlib
(voir les lignes 1 et 3 de la sortie), la seconde va avec la norme inclut. Les fichiers communs à la fin de la liste sont un exemple d'utilisation deinclude_next
.Bottom line: Tenez toujours compte de toutes les macros et options du compilateur lors de l'impression des répertoires include.
la source
Exécutez simplement ce qui suit pour répertorier les chemins de recherche par défaut:
la source
cc1
ne peut généralement pas être appelé directement car il s'agit d'une commande interne qui n'est pas sur le PATH. Peut-être souhaitez-vous modifier votre réponse pour décrire où trouver le fichier.