gcc
インクルードファイルを見つけるためにコンパイラが従う正確な規則については、http://gcc.gnu.org/onlinedocs/cpp/Search-Path.htmlで説明されています。
インクルードファイルがどこから来たかを知るための簡単なコマンドライントリックは次のとおりです。1
echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed
次に、unistd.preprocessed
ファイルを見ると、次のような行があることがわかります。
# 1 "/usr/include/unistd.h" <some numbers>
これらは、次の行のブロック(次の# number ...
行まで)がfileからのものであることを示しています/usr/include/unistd.h
。
したがって、含まれているファイルの完全なリストを知りたい場合は、次の# number
行をgrepできます。
echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*
私のUbuntu 10.04 / gcc 4.4.3システムでは、これは以下を生成します:
$ echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u
"<built-in>"
"<command-line>"
"<stdin>"
"/usr/include/bits/confname.h"
"/usr/include/bits/posix_opt.h"
"/usr/include/bits/predefs.h"
"/usr/include/bits/types.h"
"/usr/include/bits/typesizes.h"
"/usr/include/bits/wordsize.h"
"/usr/include/features.h"
"/usr/include/getopt.h"
"/usr/include/gnu/stubs-64.h"
"/usr/include/gnu/stubs.h"
"/usr/include/sys/cdefs.h"
"/usr/include/unistd.h"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h"
1 注:インクルードファイルの検索パスは、-I
コマンドラインオプションによって変更されます。そのため、呼び出しに-I path
引数を追加する必要がありgcc
ます。また、C ++ソースをコンパイルする場合は、で置き換える必要-x c
があり-x c++
ます。
unistd.h
。Cヘッダーファイルです。それはJavaと何をしているのですか?