2013-07-30 96 views
40

我試圖以編程方式在Linux上找到#include路徑,據我瞭解,在實踐中意味着找到GCC認爲它是什麼。 (這是真的嗎?Clang是怎麼做到的?)找出GCC包含的路徑是

根據http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html一些組件涉及CPU架構和GCC版本;後者尤其看起來很棘手;我猜想可以通過運行gcc --version並解析輸出(或gcc -v)來獲得,但這看起來似乎不夠優雅而且最糟糕時很脆弱。假設一個人的程序正在使用GCC進行編譯,從一個人的代碼中執行它可能是另一種選擇,但這需要依賴於這個假設。

推薦的方法是什麼?

回答

82

命令

echo | gcc -E -Wp,-v - 

將顯示在使用中的包含路徑。

+1

bash上的哪個gcc命令做同樣的事情? – 2013-07-30 07:38:16

+3

@WedaPashi:No. – caf

+0

'echo |'必要嗎? –

15

我不確定你的意思是建議用的方式找到包含路徑。所述標準方式是如下面給出的(對於C和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