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?
Der Befehl
echo | gcc -E -Wp,-v -
zeigt den verwendeten Include-Pfad an.
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