私はLinuxで#include
パスをプログラムで見つけようとしていますが、それは理解しているように、実際にはGCCがそれと見なすものを見つけることを意味します。 (それは本当ですか?Clangはどのようにそれを行いますか?)
http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html によると、一部のコンポーネントにはCPUアーキテクチャとGCCバージョンが関係しています。後者は特に注意が必要です。 gcc --version
を実行して出力(またはgcc -v
)を解析することで取得できると思いますが、これはせいぜい洗練されておらず、最悪の場合脆弱です。プログラムがGCCでコンパイルされていると仮定してコード内から実行することは別のオプションかもしれませんが、その仮定に依存する必要があります。
推奨される方法は何ですか?
コマンド
echo | gcc -E -Wp,-v -
使用中のインクルードパスが表示されます。
推奨インクルードパスを見つける方法が何を意味するのかわかりません。 標準の方法は以下のとおりです(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