make 改訂版(6章 続き, 7章)

昨日の強制リコンパイル時に延々とmakefileを作り直すやつを、もう少し調べてみよう。

make には'-n' っていうオプションがあるみたいで、
実際にコンパイルはしないけど、どういうコマンドを実行しようとしているのかが表示される。

[kobakoba0723@fedora13-intel64 header]$ make -n -f basic.mk
make -f basic.mk  "FRC=" makefile
make[1]: ディレクトリ `header' に入ります
rm -f makefile
cp basic.mk makefile
echo "#Automatically generated dependencies lit:" >> makefile
cc  -M main.c hoge.c piyo.c >> makefile
chmod -w makefile
make[1]: ディレクトリ `header' から出ます
make  "FRC=" main.o hoge.o piyo.o
make[1]: ディレクトリ `header' に入ります
cc    -c -o main.o main.c
cc    -c -o hoge.o hoge.c
cc    -c -o piyo.o piyo.c
make[1]: ディレクトリ `header' から出ます
cc -o main main.o hoge.o piyo.o
[kobakoba0723@fedora13-intel64 header]$ make -n -f basic.mk FRC=force_rebuild
make -f basic.mk  "FRC=force_rebuild" makefile
make[1]: ディレクトリ `header' に入ります
rm -f makefile
cp basic.mk makefile
echo "#Automatically generated dependencies lit:" >> makefile
cc  -M main.c hoge.c piyo.c >> makefile
chmod -w makefile
make[1]: ディレクトリ `header' から出ます
make  "FRC=force_rebuild" main.o hoge.o piyo.o
make[1]: ディレクトリ `header' に入ります
cc    -c -o main.o main.c
cc    -c -o hoge.o hoge.c
cc    -c -o piyo.o piyo.c
make[1]: ディレクトリ `header' から出ます
cc -o main main.o hoge.o piyo.o

force_rebuildを指定しても、makefileを作成する処理は1回しか走ってないなぁ。
後は、'-d'オプションか。
これは、makeがどのサフィックスルールを適用したかを逐一出力してくれるオプション

[kobakoba0723@fedora13-intel64 header]$ make -d -f basic.mk FRC=force_rebuild
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.

This program built for x86_64-redhat-linux-gnu
makefile を読み込みます...
makefile `basic.mk' の読み込み中...
makefile の更新中....
 ターゲットファイル `basic.mk' の検討を行います.
  `basic.mk' のための暗黙ルールを探します.
  語幹 `basic.mk' とのパターンルールを試します.
  暗黙の必要条件 `basic.mk.o' を試します.
  語幹 `basic.mk' とのパターンルールを試します.
  暗黙の必要条件 `basic.mk.c' を試します.
(以下、省略)

うわぁ、なんか延々と出力してくれる。。。え〜、見るのがつらいな、これf(^ ^;
オブジェクトファイルの作成処理が延々と進んでるなぁ。

make  "FRC=force_rebuild" main.o hoge.o piyo.o
Re-executing[1]: make FRC=force_rebuild main.o hoge.o piyo.o
Re-executing[2]: make FRC=force_rebuild main.o hoge.o piyo.o
Re-executing[3]: make FRC=force_rebuild main.o hoge.o piyo.o

ん〜、出力してみたものの何が何だかよくわかんないなぁ。。。
頭からちゃんと出力を追っかけてみるか。