最近はMakefileを自作せずに、GNU Toolchainの勉強も兼ねてGNU Automakeを使ってMakefileを生成しています。大したプログラムでもないのに ./configureとやるのはめんどくさいけど…。
Automakeで作ったMakefileはコマンドの実行履歴が大量に出ます。コンパイラに大量のオプションを渡すのと、そのオプションを全てログとして出力するためです。そのせいでコンパイラの警告やエラーがすっ飛んでいって消えてしまいます。
大量のログを見直すのはつらいです。いちいちスクロールバックしたり、パイプしてページャで見なければならないので、非常に面倒です。
この点優秀なのがLinux Kernel 2.6のビルドスクリプトです。単純にmakeとすると簡潔なログ、make V=1とすると詳細なログが出ます。
Linuxのmakeは以下のようなログが出ます。どのファイルに何をしている(CC, LD, CHKなど)か?だけが表示されます。
$ make scripts/kconfig/conf -s arch/x86/Kconfig CHK include/linux/version.h UPD include/linux/version.h (略) UPD include/linux/compile.h CC init/version.o ...
同じ部分の詳細出力(make V=1)は以下のようになります。
$ make V=1 make -f /home/katsuhiro/usr/src/linux-2.6.30/Makefile silentoldconfig make -f scripts/Makefile.build obj=scripts/basic mkdir -p include/linux include/config make -f scripts/Makefile.build obj=scripts/kconfig silentoldconfig gcc -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab. o -lncurses scripts/kconfig/conf -s arch/x86/Kconfig rm -f include/config/kernel.release echo 2.6.30 > include/config/kernel.release set -e; : ' CHK include/linux/version.h'; mkdir -p include/linux/; ( echo \#define LINUX_VERSION_CODE 132638; echo '#define KERNEL_VERSION(a,b,c) (( (a) << 16) + ((b) << 8) + (c))';) < /home/katsuhiro/usr/src/linux-2.6.30/Makefil e > include/linux/version.h.tmp; if [ -r include/linux/version.h ] && cmp -s inc lude/linux/version.h include/linux/version.h.tmp; then rm -f include/linux/versi on.h.tmp; else : ' UPD include/linux/version.h'; mv -f include/linux/versi on.h.tmp include/linux/version.h; fi (略) UPD include/linux/compile.h gcc -Wp,-MD,init/.version.o.d -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/ 4.3.2/include -Iinclude -I/home/katsuhiro/usr/src/linux-2.6.30/arch/x86/include -include include/linux/autoconf.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototype s -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-decl aration -Os -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack- boundary=2 -march=i686 -mtune=generic -Wa,-mtune=generic32 -ffreestanding -DCONF IG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -pipe -Wno-sign-compare -fno-asynchro nous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-stack-protector - fno-omit-frame-pointer -fno-optimize-sibling-calls -Wdeclaration-after-statement -Wno-pointer-sign -fwrapv -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR( version)" -D"KBUILD_MODNAME=KBUILD_STR(version)" -c -o init/version.o init/ver sion.c ...
普段はmakeのシンプルなログで異常がないかどうかだけをチェックします。ビルドエラーに遭遇したらmake V=1で詳細なコンパイルオプションを眺めて原因を考えます。便利ですねえ。
良いモノは見習いましょう。Automakeでログを抑制する方法はないのでしょうか?
残念ながら、ネットでちょこっと調べた限りではやり方がわかりませんでした。誰かご存じないですか?
< | 2009 | > | ||||
<< | < | 11 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | - | - | - | - | - |
合計:
本日: