組み込みルールの概要
前回(make入門 #3 自動変数とパターンルール)は以下のようなパターンルールについて説明しました。prog2: main.o sub.o
gcc -o $@ $^
%.o: %.c
gcc -c -o $@ $<
main.o: main.c sub.h
sub.o: sub.c sub.h
ここで青字で示されるパターンルールをMakefileから削除してみます。
prog2: main.o sub.o gcc -o $@ $^ main.o: main.c sub.h sub.o: sub.c sub.hこのMakefileをカレントディレクトリに配置してmakeを実行します。
$ make cc -c -o main.o main.c cc -c -o sub.o sub.c gcc -o prog2 main.o sub.oなんと、このMakefileでもビルドが成功します。 とくに驚くべきことは、*.cから*.oを作成する方法を指定しなていにもかかわらず、コンパイルが実行されています。 実は、makeはデフォルトのパータンルールを持っており、パターンルールが明示されていない場合、そのデフォルトのルールが使用されます。 このパターンルールを組み込みルールと呼びます。
C言語用の組み込みルール
以下のGNU Makeの公式マニュアルに組み込みルールが列挙されています。 この中で*.cから*.oを作成する組み込みルールは以下のように記載されています。$(CC) $(CPPFLAGS) $(CFLAGS) -cさらに、上記の変数の$(CC)なども組み込みのデフォルト値があります。以下に記載されています。 上記のサイトに記載されている、それぞれの変数のデフォルト値を以下に示します。
変数 | デフォルト値 |
---|---|
CC | cc |
CPPFLAGS | (なし) |
CFLAGS | (なし) |
CFLAGS = -g3 -O2
prog2: main.o sub.o
gcc -o $@ $^
main.o: main.c sub.h
sub.o: sub.c sub.h
このMakefileを使ってmakeを実行すると以下のようにCFLAGSに設定したオプションが付与されています。
cc -g3 -O2 -c -o main.o main.c cc -g3 -O2 -c -o sub.o sub.c gcc -o prog2 main.o sub.o
まとめ
本記事では、組み込みルールについて説明しました。
以下には、make入門の全記事がリストアップされています。
0 件のコメント:
コメントを投稿