Last Update 2021/12/23
-I ディレクトリ
-iquote ディレクトリ
-isystem ディレクトリ
-idirafter ディレクトリ
-iquote ディレクトリ
-isystem ディレクトリ
-idirafter ディレクトリ
前処理の際にヘッダファイルを検索するリストにディレクトリを追加
テスト概要
-I、-iquote、-isystem、-idirafterオプションを使用してコンパイル
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
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を上記ディレクトリにコピー
インクルードガードを一部変更
/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」を出力