新人向けドキュメントの下書をメモ.
CPPFLAGS=-I/usr/local/include LDLIBS=hogehoge.a all: sample sample: sample.o sub.o
というMakefileと,二つのソースファイル
- sample.c
- sub.c
を用意し,
$ make all
を実行した場合の処理を順に説明する.
- all: sample より all をつくるためには,sample を生成する必要がある.
- sample: sample.o sub.o より sample を生成するためには sample.o と sub.o が必要
- sample.c というソースがすでにあるため,暗黙の生成ルール %.o: %.c より sample.c から sample.o が生成される.すなわち,
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -o $@ -c $<
が展開され以下のコマンドが実行される
cc -I/usr/local/include -o sample.o -c sample.c
- 同様にsub.c から sub.o が生成される.
cc -I/usr/local/include -o sub.o -c sub.c
- sample: sample.o sub.o のソース側が完成したので,ターゲットが生成される.ここでも 暗黙の生成ルール %: %.o が適用され,
$(CC) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@
が展開され,以下のコマンドが実行される.
cc sample.o sub.o hogehoge.a -o sample
このように 暗黙の生成規則(ルール)をうまく使うと 簡潔で効率のよいMakefileを記述することができる.
さらに詳しい内容として,以下のエントリを追加しました.あわせてどうぞ.
また書籍としては以下のものがオススメです.