スラッシュドットに聞け: make に代わるビルドツール、おすすめは ? 61
ストーリー by reo
Omake と Cmake を 部門より
Omake と Cmake を 部門より
ある Anonymous Coward 曰く、
OSS のビルドでは、多くの場合 make を利用することが多い。Wikipedia の make の項目でも「UNIX 系ソフトウェアは、ソースコードの形で配布されることが多いが、そのビルド作業にはほぼ必須のツールといえる」と述べられている make だが、近年ではこれに代わるツールも多く登場しており、たとえば Visual Studio では make をまったく使わずにビルドを行うことができる。
もちろん、make は柔軟であり有用なツールではあるのだが、問題は (C++ のように) 記述に自由度が高すぎて、Makefile を作成するユーザーの技量によっては読解が激しく難しいものができてしまう点だ。また、大規模なソフトウェアの場合サブディレクトリを作ってそれぞれに Makefile を作成する、というのが一般的だが、配置方法や内容によってはこれまた訳の分からない Makefile が散乱することになってしまう。
「誰が使っても比較的安定した品質で管理できるビルドツール」というものは存在するのだろうか ? それとも、皆おとなしく make を使っているのだろうか ?
Ninja build system (スコア:5, 興味深い)
最近Ninjaというビルドシステムを触っています。
http://martine.github.com/ninja/manual.html [github.com]
Makefileに相当する.ninjaファイルの書式が意外と読みやすく書きやすかったことと、並列ビルドがデフォルトな所が気に入ってます。Makefileを手書きするような人ならすぐに慣れるのではないかと思います。
以下参考リンク:
http://osdn.jp/magazine/11/02/09/0832255 [osdn.jp]
http://d.hatena.ne.jp/karasuyamatengu/20110207/1297108418 [hatena.ne.jp]
http://cpplover.blogspot.com/2011/03/blog-post_05.html [blogspot.com]
DON
Re: (スコア:0)
存在を知らなかったので情報ありがたいです。
ところで
> 高速なことからNinjaと名付けたという。
高速=忍者?
Re:Ninja build system (スコア:2)
DON
Re: (スコア:0)
> 高速=忍者?
目にもとまらぬ早業で~♪
Re: (スコア:0)
カワサキのバイク乗りなんだろ
今どき (スコア:2, おもしろおかしい)
今どきmakeを使っている奴ってMAKE組だよねー。
・・・うん。言ってみたかっただけなんだ。ごめん。orz
プログラミング言語 make (スコア:2)
自分で見返すのも嫌になるぐらい長たらしい手順書を、共通部分もあるが微妙に内容を変えた「技術者向け」「一般利用者向け」「他部署の参考用」と出力を分ける時などは HTML のタグブラウザで直接手順を書いて、 #ifdef とかで条件も分けて、Makefile は cpp 通して複数のターゲット文章を作るように書いて、make して、HTML は Web 公開用に、それを Word で読ませて PDF に変換して配布用とか、作り分けてる。最後に "make up" と打てば複数の文書保管サーバーにアップロードされるようにしてある。
今のところは make で間に合っているというか…習得に時間を掛けたせいもあって make が好きだったりするのだが、確かに、後で自分で Makefile 見ても分かりづらい場合がある。それでコメント書くようにしているけど。Makefile 生成ツールとかは使わないな。そもそも Makefile が手で書けない人間向けのお助けツールだが、人間が書くのよりダメな Makefile を生成するし、ドキュメント作成のための Makefile の生成などは無理だし。
make はツールというより、Makefile 自体が、手順を自動化するプログラミング言語だと思えばいいのでは。だから、使用されている「プログラミングテクニック」が判らない人に読解できないのは当たり前かと。でもそれは「make を知らない人の責任」であって、「誰が使っても」できる訳ではないという理由で make に「責任取れ」「もっと分かりやすくなれ」というのも。
より優れたツールが出れば、それに負けたツールは自然と消える物だ。例えば make は FreeBSD のシステム全体をコンパイルできる以上、これで機能不足というケースはほとんど無いと思うが。
誰が使っても (スコア:1)
「誰が使っても」ってのは、まあ無理なんじゃない?
最近は、IDEとかフレームワークとかがやってくれるもんじゃないんですか?古い人間なのでよく知らんのですが。
Re: (スコア:0)
バージョン管理にはrcs/diffを使ってる古い古い人間です。 テキスト以外のリソースを管理する必要も無いので.........
Re: (スコア:0)
UNIXなんてコンソールアプリをパイプでつなげて目的の作業を達成する慣わしがあるんだから、全コンパイルでも問題無いようにビルド単位を小さくすりゃいいんだよ。
Re: (スコア:0)
「make に代わるビルドツール」の開発動機って、多くの場合は「UNIX のシェルに依存しない」か
「(リ)ビルドにかかる時間」のどちらかなんですよね。
UNIX っぽい環境での小規模プロジェクトなら、標準的という点でやっぱり make でいいんじゃないかな。
Makefile の可読性といっても、結局はシェルスクリプトが読めるかということだし…
「使う」がダウンロードしてきたソースコードをビルドするだけなら、別に読めなくてもよいという割り切りもあるかと。
あ、悪意のあるコマンドが含まれていないかどうかくらいは確認できた方がいいかもですね。
自分で書いたコードをビルドするのに「使う」分には、いろいろ試してみて使い易いのを選べばよいと思います。
autotoolは? (スコア:1, 興味深い)
ためしに手元のプログラムでautoscan⇒mv configure.scan configure.in⇒configure.in編集⇒Makefile.am作成⇒touch NEWS README AUTHORS ChangeLog⇒aclocal; autoheader; automake -a -c; autoconf⇒./configureしてみたら想像以上に面倒くさいことにワロタ
手書きでMakefile書いた方が早い
Re:autotoolは? (スコア:1, 興味深い)
んなもん、findして・・・とかいうのの行き着いた先がautotoolかと
Re:autotoolは? (スコア:1)
古い人間な私はmkmfを愛用してましたが、最近はめっきり聞かなくなりました。
ま、私もCで開発することがなくなったのでMakefileを書くこともなくなったのですが。
Re:autotoolは? (スコア:1)
×:make に変わる (スコア:1, すばらしい洞察)
×:make に変わる
○:make に代わる
「変わる」じゃ結局 make 使うことになっちゃうよ
Re: (スコア:0, オフトピック)
うっぷす、ご指摘 thx です。修正しました。
Hiroki (REO) Kashiwazaki
Rubyのrakeを使っているけど (スコア:1)
Rubyのrakeを使っているけど、かっこよく書くに
は適当なライブラリをrequireしなきゃいけなかっ
たり、疑問があってもどのドキュメントを読めば
よいのかいまいちわからなかったりでmakeのほう
がよいなぁと思ってしまいます。
たとえば今はGNU make風な
ってのをどうrakeで書けばよいか調べがつきません。
具体的には http://ulmul.rubyforge.org/svn/ulmul/trunk/Rakefile [rubyforge.org]
のdesc "Create index.en.html"とdesc "Create index.ja.html"と
を1つにまとめたいです。教えて下さい!
love && peace && free_software
t-nissie
Re:Rubyのrakeを使っているけど (スコア:3, 参考になる)
こういうことでしょうか? ruleというところがMakefileのパターンマッチに相当すると思います。
task :default => :build
task :build => ['a.o', 'b.o', 'c.o']
rule '.o' => ['.c'] do |t|
sh 'cc', '-c', '-o', t.name, t.source
end
くわしくはRakeのドキュメントやdoc.rubyrake.orgのドキュメントをご覧ください。なお、上記ruleは http://docs.rubyrake.org/user_guide/chapter03.html [rubyrake.org] で説明されています。
DON
Re:Rubyのrakeを使っているけど (スコア:1)
ありがとうございます。
紹介していただいた "rule" を使おうと Rakefile を眺めていたら、
結局こんな解決策になりました。RakefileもRubyスクリプトなんですね。
BEFORE:
AFTER:
love && peace && free_software
t-nissie
Re:Rubyのrakeを使っているけど (スコア:2)
Ruby DSLでググるとRakeの話が出てくるほどなので、典型的な例なのかもしれません。
DON
ソフト任せ (スコア:1)
本文にもある通り、IDE任せにしてますねー。
emacs、vi、メモ帳、edlin、秀丸、その他諸々何を使って書いてもいいので、最終的にはIDEに放り込んでビルド通るように設定してくれ、という感じです。
依存関係がめちゃくちゃなプロジェクトファイルだと面倒ですけど、それはまあmakeだってそうだし。
LaTeX + Omake (スコア:1)
論文はもとより提案書や仕様書、出張報告書なども基本的に LaTeX で書く程度に TeX Love な僕ですが (だが TeX 練度は恥ずかしいほどまでに低い) 、数年前に OMake つかって LaTeX コンパイルしたら簡単すぎて身長が5cm伸びた [hatena.ne.jp]なる記事を読んで以来、特に Mac 環境では LaTeX での文書執筆に OMake なしでは生きていけないぐらいになっています (Windows での DVIOUT みたいな DVI ビューアがあればいいんですが) 。
# DVIOUT はウィンドウをアクティブにするだけで再描画してくれたんですが、
# 僕の知る範囲では Mac 用 DVI ビューアでそういうのはないような。
# あったら教えてください。
Hiroki (REO) Kashiwazaki
Re: (スコア:0)
最終生成物をdviではなく、dvi2pdfmxを使ってpdfに変換しています。
pdfはMac標準のプレビューで表示します。
プレビューはファイルの更新を関知すると自動的に再描画してくれます。
OMakeがpdfまで面倒をみてくれるかどうか知りませんが、私はこれで確認しています。
ちなみにビルドには昔ながらのmakeを使っています。
# ただPSの画像があるとdvi2pdfmxの処理速度がそこでがた落ちになるのが少し難点
Re:LaTeX + Omake (スコア:2, 興味深い)
英語圏では既に DVI を経由せず直接 PDF を生成する pdflatex が事実上の標準になっていますので、今後の DVI ビューアのメンテナンスはあまり期待できませんね。
日本人でこの辺を頑張ってくれる若い人が出てきてくれるといいんですけど……
Re:LaTeX + Omake (スコア:1)
あー、同じですね。OMake は pdf まで面倒を見てくれますし、TeX ファイルの更新を検出して自動でコンパイル → pdf 変換までやってくれるので大変便利。僕は画像を eps で作っていたのですが、dvipdfmx の eps 変換処理で非常に長い時間を要してしまうので、このごろは画像を pdf で作っています。が、そうすると今度は platex によるコンパイルで時間を要するんだよなあ……。
Mxdvi [keio.ac.jp] というソフトがあるのを知ったのですが、これが更新検出 (あるいはウィンドウのアクティブ化) & 自動再描画を行ってくれるかどうかはまだ調べてません。
Hiroki (REO) Kashiwazaki
読解が困難 (スコア:1)
もちろん、make は柔軟であり有用なツールではあるのだが、問題は (C++ のように) 記述に自由度が高すぎて、Makefile を作成するユーザーの技量によっては読解が激しく難しいものができてしまう点だ。
テキストで開こうとしたことがないから分からないのだけど、Visual StudioとかのIDEが作るビルド用ファイルの場合、可読性が高いの?
1を聞いて0を知れ!
Re: (スコア:0)
Mavenは? (スコア:1)
TracLightningに統合されてるところから知った人間だが、まだ使ったことない。
サーバサイドで全部勝手にやってくれるなら便利なんだけど、アレどんなもんなのかなー?
# 今までのコメントから見ると利用率は低そうだ
# そもそもmake代用じゃない、か?
M-FalconSky (暑いか寒い)
cmake & ccmake (スコア:1)
ちゃんと使えば有用なツールなのでしょうかね? もし誰か使ったことがある方がいらっしゃったら、感想・意見を聞きたいです。
makeの優位性 (スコア:1)
みんな手が覚えてるってのがあるんじゃない?後発ツールがここに付け入るのは、なかなかに難しいと想像。
# 「お前はこれまでmakeした数を覚えているのかっ!?」
apache ant (スコア:0)
ただ、そこにスクリプトivyとかいれると腐っていく。
フルセットのantがほしいぜよ!
#
# mavenをbuildツールとして使うバカがいるがあれば、
# buildもできるがプロジェクト管理ツールとしてみてくれ
#
Re:apache ant (スコア:1, すばらしい洞察)
XML使う時点でうんこだと思う。
Re:apache ant (スコア:1)
yaml -> xml変換プロセスを入れればすこしはましになるかな?
Re: (スコア:0)
*BSDな人たちは、いまだにmakeとgmakeの違いに苦労してるようで・・・
kachi (スコア:0)
Re:kachi (スコア:1)
徒歩(かち)で一歩一歩あるくがごとく、手でコンパイルしていくのさー
# それなら負け(make)でいいです。
fjの教祖様
Re: (スコア:0)
makeといっても (スコア:0)
結論 (スコア:0)
Qtアプリケーションならqmake (スコア:0)
1. 1つのディレクトリにヘッダファイルとソースファイルを用意する。
2. qmake -projectで[ディレクトリ名].proを生成する。
3. 必要なら[ディレクトリ名].proファイルを編集する。例えば、デバッグできるようにするには、"CONFIG += debug"を追加する。
4. qmakeでMakefileを作る。
5. make
ファイルの追加をする場合は2.もしくは3.から。再ビルドしたいだけなら、makeをすれば変更したところだけが再ビルドされます。
ヘタレなので、一からMakefileは書けません。
Re:Qtアプリケーションならqmake (スコア:1)
キーワードはImakefileとimake。
love && peace && free_software
t-nissie
Re: (スコア:0)
qmakeが出たというのに、これまでcmakeの話題なし?
Re: (スコア:0)
>> qmakeが出たというのに、これまでcmakeの話題なし?
つ「部門名」
SCons (スコア:0)
IDE (スコア:0)
GUIやメニュー項目でコンパイルオプションやビルド条件等を指定していく方式だと、
結局いまのビルド条件はどうなっているのか、ということを一覧にしにくいし、
メニュー項目をいじったときの副作用などを全部理解してないと、たとえば
メニュー項目を指定する順番が違うと違ってしまうとか、ソースファイルに勝手に
変更が加わってしまうとか、だからソースファイルに手を加えた後だと競合して
おかしなことになるとか、とにかくややこしすぎると感じます。
テキストファイルの内容で指定するほうが、そのファイルの内容が全てなので、
とっても簡潔で単純で分かりやすいと思います。
古い人間なのでそう思うのかも知れません。
Re:IDE (スコア:1)
一種類の言語だけで書けるようなプロジェクトならIDEが良さそうだけれど
一部はCとか、一部はasmとかだとやっぱりmakeを使った方がハマらなさそう。
Re:IDE (スコア:1)
多いわけで、そう考えるとコンパイラのオプションは実はソースコードな
わけで、バージョン管理されたり、バージョン毎の違いを抽出するために
diff で差分が取り出せなければいけないわけで、そうなるとそういった
設定を隠蔽しがちな IDE は やはりよろしくないと思う私も古い人間でして、
やっぱり Makefile での管理がいいですね。
理想 (スコア:0)
しかしながら、Android位の巨大なプロジェクトになると、Makefileをパースするだけで時間が掛かるんだよねぇ。もうそろそろ、"プレコンパイルドMakefile"みたいなものが出てきても良いと思うのよ。
ソースの依存関係を知っているのはコンパイラだけなので、gcc -MMDとかやって依存関係を吐かせるじゃない?
しかしながら、config.hのようなものが更新されると、必要のないものまでビルドされちゃって、結局時間が掛かるんだよねぇ。もうそろそろ、makeはコンパイラと合体して、依存関係を綿密にやりとりすべきだと思うのよ。
そもそも、更新されたファイルについて一番よく知っているのは、SCMじゃない?
いっそのこと、SCMもmakeに合体してしまえば、更新ファイルのスキャンも簡単になるし、ビルド成果物も同じリポジトリ上で管理してしまえば、分散ビルドも簡単にできると思うのよ。
あ、それがIDEってやつですか、そうですか。
omake? (スコア:0)