web-dev-qa-db-ja.com

GCCインクルードパスとは

私はLinuxで#includeパスをプログラムで見つけようとしていますが、それは理解しているように、実際にはGCCがそれと見なすものを見つけることを意味します。 (それは本当ですか?Clangはどのようにそれを行いますか?)

http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html によると、一部のコンポーネントにはCPUアーキテクチャとGCCバージョンが関係しています。後者は特に注意が必要です。 gcc --versionを実行して出力(またはgcc -v)を解析することで取得できると思いますが、これはせいぜい洗練されておらず、最悪の場合脆弱です。プログラムがGCCでコンパイルされていると仮定してコード内から実行することは別のオプションかもしれませんが、その仮定に依存する必要があります。

推奨される方法は何ですか?

64
rwallace

コマンド

echo | gcc -E -Wp,-v -

使用中のインクルードパスが表示されます。

133
caf

推奨インクルードパスを見つける方法が何を意味するのかわかりません。 標準の方法は以下のとおりです(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
18
devnull