t-nissieの日記: 【電脳】Linux kernelとかRubyとかのMakefileの中の$(Q) 11
日記 by
t-nissie
Linux kernelとかRubyとかのMakefileの中の$(Q)、
Q=@って誰がどこで決めているのか?
GNU makeの機能なのか?
makeの様子をよく見たいときは make Q='' でよいのか?
「Makefile Q」だけだと検索性が悪くて説明or解説が見つからない。
どなたか教えて下さい!
【追記】
GNU makeはGNUmakefileでQが設定されるということをコメントで教えていただいた。
さらに、ためしにOpenBSD 5.4で
$ git clone git://github.com/ruby/ruby.git
$ cd ruby
$ git checkout -b mybranch origin/trunk
$ git branch -a
$ automake --add-missing # Add tools/config.guess and tools/config.sub
$ autoconf -v
$ bash ./configure --with-baseruby=/usr/local/bin/ruby20 # There may be a bashism.
$ make ruby
したら、BSDmakefileもないのにQが設定されているような気がする。
逆にますます謎が深まってしまった。また何かを見逃しているのかもしれないが。
Makefileの中で決められてるように見えますけど (スコア:1)
kernelのMakefile的にはVという値でKERNEL_VERBOSEを制御して、それがQを決めてるような。
ファイル内のコメントにも全コマンド見たければmake V=1でやれとあります。試してないけど、これで良いような。make Q=で変更しても上書きされるからダメかなぁ。
Re:Makefileの中で決められてるように見えますけど (スコア:1)
下記はその一例になるか、無関係で余計なものなのかはよくわかりませんが。。。
http://ftp.slackware.com/pub/nslu2/sources/git/git.openmoko.org.git.ke... [slackware.com]
# A simple variant is to prefix commands with $(Q) - that's useful
# for commands that shall be hidden in non-verbose mode.
#
# $(Q)ln $@ :<
#
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
Re:Makefileの中で決められてるように見えますけど (スコア:1)
なるほど。ありがとうございます。
Linux kernelとRubyとでは$(Q)の仕組みがちがうのかもしれませんね。
RubyのMakefile.in [github.com]では$(Q)が出てくるまでQについて何も記述がないです。
automakeはautomake --add-missingでtools/config.guessとtools/config.subとを用意するだけに使うみたいです。たぶん。
love && peace && free_software
t-nissie
Re:Makefileの中で決められてるように見えますけど (スコア:1)
Ruby だと、GNUmakefile から読み込まれている uncommon.mk で Q が設定されているようです。
MANによると、 GNU make は GNUmakefile -> makefile -> Makefile の順にファイルを探すらしい。
svn-init() {
svnadmin create .svnrepo
svn checkout file://$PWD/.svnrepo .
}
Re:Makefileの中で決められてるように見えますけど (スコア:1)
コメント、ありがとうございます。
GNUmakefileを完全に見逃していました。
Makefileがgmakeにもbmakeにもnmakeにも有効なとてもポータプルなものである。 [tumblr.com]ために
このようにややこしいことになっているのかもしれません。
love && peace && free_software
t-nissie
Re: (スコア:0)
追記:GNUmakefile と uncommon.mk は configure 時に作られる模様。
uncommon.mk は common.mk が元になってるっぽいです。
Re:Makefileの中で決められてるように見えますけど (スコア:1)
状況が良くわからないのですが、
Makefileが無い/作ってない状況なのでしょうか…?
そのリポジトリ(のREADME?)にはconfigureが無かったらautoconfで
作ってね的なことが書いてあってconfigureはないので、ビルドするなら、
autoconfでconfigure作成、作ったconfigure実行、make実行でビルド
という流れになるような。
そのQがからむのは最後のmake実行するとこだけじゃないかな…?
その時点ならMakefileできてるはずなのでそこを見れば良いような。
$(Q)は上のktmizugakiさんのコメント以下にあるように、
common.mk に記述があって、見た感じV=1でverboseになりそう。
Re:Makefileの中で決められてるように見えますけど (スコア:1)
コメント、ありがとうございます。
autoconfはやったのですが、
GNUmakefileを完全に見逃していました。
ごめんなさい。
love && peace && free_software
t-nissie
Automake (スコア:1)
Automake では $(AM_V) が $(Q) に相当するのですが
Makefile.in:
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
となっていて、configure で make が nested-variable に対応しているか check を行い
その結果に従って @AM_V@ と @AM_DEFAULT_V@ を置換し
(cf. ${datadir}/aclocal-APIVERSION/silent.m4)
Makefile: (w/nested-variable)
AM_DEFAULT_VERBOSITY = 0 # or 1
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 =
Makefile: (wo/nested-variable)
AM_DEFAULT_VERBOSITY = 0 # or 1
AM_V_at = $(am__v_at_0) # or $(am__v_at_1)
am__v_at_ = $(am__v_at_0) # or $(am__v_at_1)
am__v_at_0 = @
am__v_at_1 =
となります。
Re:Automake (スコア:1)
コメント、ありがとうございます!
AM_VやAM_V_atはQに較べたらずっと検索がしやすいですね。
love && peace && free_software
t-nissie
Re: (スコア:0)
ああ…すいません。
Automake では $(AM_V) が $(Q) に相当するのですが
は
Automake では $(AM_V_at) が $(Q) に相当するのですが
の間違いです。訂正します。