2013-07-30 4 views
40

Ich versuche, den Pfad #include auf Linux programmatisch zu finden, was, wie ich es verstehe, in der Praxis bedeutet, zu finden, was GCC es für sich betrachtet. (Ist das wirklich wahr? Wie funktioniert Clang?)Herauszufinden, was der GCC-Pfad enthalten ist

Nach http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html einige der Komponenten betreffen die CPU-Architektur und die GCC-Version; Letzteres scheint besonders schwierig zu sein; Ich nehme an, es könnte durch Ausführen gcc --version und Parsing der Ausgabe (oder gcc -v) erhalten werden, aber das scheint im besten Fall unelegant und im schlimmsten Fall anfällig. Es kann eine andere Option sein, es innerhalb des eigenen Codes zu tun, wenn man annimmt, dass das eigene Programm mit GCC kompiliert wird, aber dies würde abhängig von dieser Annahme erforderlich sein.

Was ist der empfohlene Weg, es zu tun?

Antwort

82

Der Befehl

echo | gcc -E -Wp,-v - 

den Pfad umfasst im Gebrauch zeigen.

+1

macht 'which gcc' Befehl auf bash dasselbe Zeug? –

+3

@WedaPashi: Nr. – caf

+0

Ist das 'Echo |' notwendig? –

15

Ich bin mir nicht sicher, was Sie mit der empfohlen Weg, um den Include-Pfad zu finden. Die Standard Weise ist, wie unten angegeben (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 
Verwandte Themen