Last Update 2021/12/11
-MD
-Mオプションと同様の依存関係出力をファイルに対して実施
テスト概要
-MDオプションのみを指定して実行
-MDオプションと-Eオプションを指定して実行
-MDオプションと-oオプションを指定して実行
-MDオプション、-Eオプション、および-oオプションを指定して実行
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
sample.h
#ifndef SAMPLE_H
#define SAMPLE_H
#include "func.h"
#endif /* SAMPLE_H */
sample.c
#include "sample.h"
int main(void)
{
sampFunc();
return 0;
}
func.h
#ifndef FUNC_H
#define FUNC_H
void sampFunc(void);
#endif /* FUNC_H */
func.c
#include "func.h"
void sampFunc(void)
{
}
-MDオプションのみを指定して実行
$ gcc -MD sample.c func.c
$ ls -l
total 44
-rwxr-xr-x 1 ****** ******** 18152 *** ** **:** a.out
-rw-r--r-- 1 ****** ******** 44 *** ** **:** func.c
-rw-r--r-- 1 ****** ******** 49 *** ** **:** func.d
-rw-r--r-- 1 ****** ******** 74 *** ** **:** func.h
-rw-r--r-- 1 ****** ******** 66 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 62 *** ** **:** sample.d
-rw-r--r-- 1 ****** ******** 77 *** ** **:** sample.h
$ ソースファイルの依存関係を拡張子「.d」のファイルとして出力
コンパイル完了後、実行ファイルも出力
出力ファイル(func.d)
(着色部はカレントディレクトリ内のファイル)
(着色部はカレントディレクトリ内のファイル)
func.o: func.c /usr/include/stdc-predef.h func.h
出力ファイル(sample.d)
(着色部はカレントディレクトリ内のファイル)
(着色部はカレントディレクトリ内のファイル)
sample.o: sample.c /usr/include/stdc-predef.h sample.h func.h
-MDオプションと-Eオプションを指定して実行
$ gcc -MD -E sample.c func.c
# 1 "sample.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "sample.c"
# 1 "sample.h" 1
# 1 "func.h" 1
void sampFunc(void);
# 5 "sample.h" 2
# 2 "sample.c" 2
int main(void)
{
sampFunc();
return 0;
}
# 1 "func.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "func.c"
# 1 "func.h" 1
void sampFunc(void);
# 2 "func.c" 2
void sampFunc(void)
{
}
$ ls -l
total 24
-rw-r--r-- 1 ****** ******** 44 *** ** **:** func.c
-rw-r--r-- 1 ****** ******** 49 *** ** **:** func.d
-rw-r--r-- 1 ****** ******** 74 *** ** **:** func.h
-rw-r--r-- 1 ****** ******** 66 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 62 *** ** **:** sample.d
-rw-r--r-- 1 ****** ******** 77 *** ** **:** sample.h
$ ソースファイルの依存関係を拡張子「.d」のファイルとして出力
-Eオプションによりプリプロセス実行後に停止。実行ファイルの出力は無し
出力ファイル(func.d)
(着色部はカレントディレクトリ内のファイル)
(着色部はカレントディレクトリ内のファイル)
func.o: func.c /usr/include/stdc-predef.h func.h
出力ファイル(sample.d)
(着色部はカレントディレクトリ内のファイル)
(着色部はカレントディレクトリ内のファイル)
sample.o: sample.c /usr/include/stdc-predef.h sample.h func.h
-MDオプションと-oオプションを指定して実行
$ gcc -v -MD -o smpl sample.c func.c
$ ls -l
total 40
-rw-r--r-- 1 ****** ******** 44 *** ** **:** func.c
-rw-r--r-- 1 ****** ******** 74 *** ** **:** func.h
-rw-r--r-- 1 ****** ******** 66 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 77 *** ** **:** sample.h
-rwxr-xr-x 1 ****** ******** 18152 *** ** **:** smpl
-rw-r--r-- 1 ****** ******** 47 *** ** **:** smpl.d
$ ソースファイルの依存関係を拡張子「.d」のファイルとして出力
コンパイル完了後、実行ファイルを「smpl」として出力
出力ファイル(smpl.d)
生成ファイルは一つだけとなっており、ターゲットは「smpl」、前提条件が「func.c」に対応する内容となっている
(着色部はカレントディレクトリ内のファイル)
生成ファイルは一つだけとなっており、ターゲットは「smpl」、前提条件が「func.c」に対応する内容となっている
(着色部はカレントディレクトリ内のファイル)
smpl: func.c /usr/include/stdc-predef.h func.h
-MDオプション、-Eオプション、および-oオプションを指定して実行
対象ファイルにsample.c、func.cの2つを指定した場合
$ gcc -MD -E -o smpl sample.c func.c
gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
$ ls -l
total 16
-rw-r--r-- 1 ****** ******** 44 *** ** **:** func.c
-rw-r--r-- 1 ****** ******** 74 *** ** **:** func.h
-rw-r--r-- 1 ****** ******** 66 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 77 *** ** **:** sample.h
$ ファイルが複数の場合に-c、-S、-Eと-oを一緒に指定できない事へのエラーメッセージ
実行は途中で停止
対象ファイルをsample.cのみとした場合
$ gcc -E -MD -o smpl sample.c
$ ls -l
total 24
-rw-r--r-- 1 ****** ******** 44 *** ** **:** func.c
-rw-r--r-- 1 ****** ******** 74 *** ** **:** func.h
-rw-r--r-- 1 ****** ******** 66 *** ** **:** sample.c
-rw-r--r-- 1 ****** ******** 77 *** ** **:** sample.h
-rw-r--r-- 1 ****** ******** 291 *** ** **:** smpl
-rw-r--r-- 1 ****** ******** 62 *** ** **:** smpl.d
$ ソースファイルの依存関係を拡張子「.d」のファイルとして出力
コンパイル完了後、実行ファイルを「smpl」として出力
出力ファイル(smpl.d)
(着色部はカレントディレクトリ内のファイル)
(着色部はカレントディレクトリ内のファイル)
sample.o: sample.c /usr/include/stdc-predef.h sample.h func.h
出力ファイル(smpl)
# 1 "sample.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "sample.c"
# 1 "sample.h" 1
# 1 "func.h" 1
void sampFunc(void);
# 5 "sample.h" 2
# 2 "sample.c" 2
int main(void)
{
sampFunc();
return 0;
}