回答:
`gcc -print-prog-name=cc1plus` -v
このコマンドは、gccに使用しているC ++プリプロセッサーを尋ね、次にそのプリプロセッサーにインクルードを探す場所を尋ねます。
あなたはあなたの特定のセットアップに対して信頼できる答えを得るでしょう。
同様に、Cプリプロセッサーの場合:
`gcc -print-prog-name=cpp` -v
cpp
の代わりにcc1
?私のdebianジェシーに$(gcc -print-prog-name=cpp) -v
(正しく)である1以上のパス、与え/usr/include/x86_64-linux-gnu
/dev/null
そう、`gcc -print-prog-name=cc1` -v < /dev/null
。
Ctrl
+を押すとD
、Unixトークで「ファイルの終わり」が送信されます。
さらに、gccは-I
オプションの後に指定されたディレクトリを調べます。
偽のシステムヘッダーを含めようとするファイルを作成できます。そのようなソースで冗長モードでgccを実行すると、偽のヘッダーを探すときにすべてのシステムインクルードの場所が一覧表示されます。
$ echo "#include <bogus.h>" > t.c; gcc -v t.c; rm t.c
[..]
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
[..]
t.c:1:32: error: bogus.h: No such file or directory
echo "#include <bogus.h>" | gcc -v -x c -
gcc -v -E - < /dev/null
またはcpp -v < /dev/null
十分です。プリプロセッサを実行する必要があるだけで、どの入力が表示されるかは関係ありません。(検索パスは、起動時に入力を確認する前に出力されます。)
GCCマニュアルのCPPセクションは、ヘッダーファイルが次のディレクトリにある可能性があることを示しています。
GCCはいくつかの異なる場所でヘッダーを探します。通常のUnixシステムでは、特に指示しない限り、#includeで要求されたヘッダーが検索されます。
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
C ++プログラムの場合、最初に/ usr / include / g ++-v3も検索します。
GCCがシステムヘッダーを探すディレクトリの完全なセットを出力するには、次のように呼び出します。
$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 |
LC_ALL=C sed -ne '/starts here/,/End of/p'
フォームの出力を生成します
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
-I
コマンドラインに-familyオプションがある場合、それらは出力される内容に影響します。
(sed
コマンドは、この呼び出しが出力する他のすべてのジャンクを取り除くLC_ALL=C
ためのものであり、sed
コマンドが機能することを確認するためのものです。「ここから開始」および「検索リストの終わり」句は IIRCに翻訳されます。)
g++ -print-search-dirs
gcc -print-search-dirs
以下をチェックアウトすることで、bashからCプログラムの(追加の)インクルードパスを表示できます。
echo $C_INCLUDE_PATH
これが空の場合、次の方法でデフォルトのインクルード場所を追加するように変更できます。
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include
これらは、指定されたヘッダーファイルのgccがデフォルトで検索するディレクトリです(ヘッダーファイルがシェブロン<>に含まれている場合)。1. / usr / local / include /-サードパーティのヘッダーファイルに使用されます。2. / usr / include /-システムヘッダーファイルに使用されます。
カスタムヘッダーファイルを上記のディレクトリ以外の場所に配置する場合は、次のように含めることができます。1.シェブロンの代わりにファイルパスで引用符( "./custom_header_files/foo.h")を使用するincludeステートメント内。2.コードのコンパイル時に-Iスイッチを使用します。gcc -I / home / user / custom_headers / -c foo.c -p foo.o基本的に-Iスイッチは、-Iスイッチで指定されたディレクトリ(標準ディレクトリをチェックする前)を最初に検索するようコンパイラーに指示します。 -Iスイッチを使用すると、シェブロンを使用してヘッダーファイルを含めることができます。