web-dev-qa-db-fra.com

Connaître le chemin d'accès inclus dans GCC

J'essaie de trouver par programme le #include chemin sur Linux, qui, si je comprends bien, signifie en pratique de trouver ce que GCC considère comme tel. (Est-ce tout à fait vrai? Comment Clang le fait-il?)

Selon http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html , certains composants impliquent l'architecture du processeur et la version de GCC; ce dernier semble particulièrement délicat; Je suppose que cela pourrait être obtenu en lançant gcc --version et en analysant la sortie (ou gcc -v), mais cela semble inélégant au mieux et fragile au pire. Le faire à partir de son code en supposant que son programme est en cours de compilation avec GCC pourrait être une autre option, mais cela nécessiterait de dépendre de cette hypothèse.

Quelle est la façon recommandée de le faire?

64
rwallace

La commande

echo | gcc -E -Wp,-v -

montrera le chemin d'inclusion utilisé.

133
caf

Je ne suis pas sûr de ce que vous entendez par recommandé pour trouver le chemin d’inclusion. La manière standard est celle donnée ci-dessous (pour c et c ++):

$ `gcc -print-prog-name=cc1` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include
End of search list.
^C
$ `gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.7
 /usr/include/c++/4.7/x86_64-linux-gnu
 /usr/include/c++/4.7/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include
End of search list.
^C
18
devnull