Loose-Info.com
Last Update 2021/12/23
TOP - 各種テスト - gcc - -I ディレクトリ (-iquote、-isystem、-idirafter)

-I ディレクトリ
-iquote ディレクトリ
-isystem ディレクトリ
-idirafter ディレクトリ
前処理の際にヘッダファイルを検索するリストにディレクトリを追加

テスト概要

-I、-iquote、-isystem、-idirafterオプションを使用してコンパイル

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル

使用ファイル一覧
. +-- func.c +-- header_dir1 | +-- func.h | +-- header_dir2 |  +-- sample.h | +-- header_dir_system | +-- stdio.h | +-- sample.c

header_dir1/func.h
#ifndef FUNC_H #define FUNC_H #include <stdio.h> #include <string.h> void sampFunc(void); #endif /* FUNC_H */

header_dir2/sample.h
#ifndef SAMPLE_H #define SAMPLE_H #include <stdio.h> #include "func.h" #endif /* SAMPLE_H */

header_dir_system/stdio.h
/usr/include/stdio.hを上記ディレクトリにコピー
インクルードガードを一部変更
#ifndef _STDIO_H #define _STDIO_H 2 <--- 変更(元ファイルは1)

func.c
#include "func.h" void sampFunc(void) { printf("strlen = %d\n", strlen("func")); printf("_STDIO_H = %d\n", _STDIO_H); }

sample.c
#include "sample.h" int main(void) { printf("sample\n"); sampFunc(); return 0; }

動作テスト

-I、-iquote、-isystem、-idirafterオプションを使用してコンパイル
$ gcc -v -iquote header_dir1 -I header_dir2 \ > -isystem header_dir_system -idirafter /usr/include \ > sample.c func.c Using built-in specs. /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 ... #include "..." search starts here: header_dir1 #include <...> search starts here: header_dir2 header_dir_system /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include /usr/local/include /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include-fixed /usr/include End of search list. as -v -I header_dir2 --64 -o /tmp/cc1D64ff.o /tmp/ccVRLcEp.s /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 ... #include "..." search starts here: header_dir1 #include <...> search starts here: header_dir2 header_dir_system /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include /usr/local/include /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include-fixed /usr/include End of search list. as -v -I header_dir2 --64 -o /tmp/ccWWjHU4.o /tmp/ccVRLcEp.s /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... $ ./a.out sample strlen = 4 _STDIO_H = 2 $ 検索順序は-iquote、-I、-isystem、-idirafter コピー・変更したstdio.hがインクルードされたため「_STDIO_H = 2」を出力