目次: 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 | - | - | - | - | - |
23年4月10日
26年1月23日
26年1月21日
25年12月26日
25年12月22日
21年12月28日
08年3月25日
25年12月10日
25年12月16日
16年3月2日
25年12月19日
25年12月8日
25年12月18日
25年12月11日
22年4月13日
16年1月25日
16年1月8日
13年8月11日
23年9月11日
08年9月10日
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
2026年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: