目次: Linux
最近は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 | - | - | - | - | - | 
 25年10月6日
 25年10月6日
 25年10月6日
 25年10月6日
 25年9月29日
 25年9月29日
 25年9月29日
 25年9月29日
 20年8月24日
 20年8月24日
 20年8月24日
 20年8月24日
 16年2月14日
 16年2月14日
 16年2月14日
 16年2月14日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 25年7月20日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 20年8月16日
 24年6月17日
 24年6月17日
 24年6月17日
 24年6月17日
 wiki
 wiki Linux JM
 Linux JM Java API
 Java API 2002年
 2002年 2003年
 2003年 2004年
 2004年 2005年
 2005年 2006年
 2006年 2007年
 2007年 2008年
 2008年 2009年
 2009年 2010年
 2010年 2011年
 2011年 2012年
 2012年 2013年
 2013年 2014年
 2014年 2015年
 2015年 2016年
 2016年 2017年
 2017年 2018年
 2018年 2019年
 2019年 2020年
 2020年 2021年
 2021年 2022年
 2022年 2023年
 2023年 2024年
 2024年 2025年
 2025年 過去日記について
 過去日記について アクセス統計
 アクセス統計 サーバ一覧
 サーバ一覧 サイトの情報
 サイトの情報合計: 
本日: