webentwicklung-frage-antwort-db.com.de

Ermitteln des GCC-Include-Pfads

Ich versuche programmgesteuert, den Pfad #include Unter Linux zu finden, was nach meinem Verständnis in der Praxis bedeutet, herauszufinden, was GCC davon hält. (Ist das ganz richtig? Wie macht Clang das?)

Laut http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html betreffen einige der Komponenten die CPU-Architektur und die GCC-Version; insbesondere letzteres scheint schwierig zu sein; Ich nehme an, es könnte durch Ausführen von gcc --version Und Parsen der Ausgabe (oder gcc -v) Erreicht werden, aber dies scheint im besten Fall unelegant und im schlimmsten Fall fragil zu sein. Es könnte eine weitere Option sein, dies aus dem eigenen Code heraus zu tun, vorausgesetzt, das eigene Programm wird mit GCC kompiliert. Dies würde jedoch abhängig von dieser Annahme erforderlich sein.

Was ist der empfohlene Weg, um es zu tun?

64
rwallace

Der Befehl

echo | gcc -E -Wp,-v -

zeigt den verwendeten Include-Pfad an.

133
caf

Ich bin nicht sicher, was Sie mit empfohlen meinen, um den Include-Pfad zu finden. Der Standard Weg ist wie folgt (für c und 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