Skip to content
No description or website provided.
C++
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.gitignore
Makefile
README.md
hello
hello.cpp
hello.h
rakefile

README.md

rake = make + shell script

Rubyで書かれたビルドツールrakeの紹介

For Ruby 1.8.7, rake 0.8.7


makeの仕事(ビルドツール編)

以下のようなMakefileがあるとして

CC=clang -Wall -Wextra -std=c++0x

hello: hello.c hello.h
    $(CC) -o hello hello.c

hellohello.chello.h から作られる。また、その時のコマンドは $(CC) ... を呼び出す」と読む。コマンドは hello.chello.h のどちらかが更新されたときのみ起動される。この生成物(hello)を ターゲット と呼ぶ。また、一つのターゲットに結び付けられた処理全体を タスク と呼ぶ。

依存関係を管理して必要なファイルだけコンパイルするツールということ。

ドキュメントの生成なども同じメカニズムで処理できる。


makeの仕事(ランチャー編)

任意のターゲットと一連のシェルコマンドを組み合わせることができるため、ランチャーとしても使われることがある。

test: hello
    ./hello

このターゲットは make target で起動するが、ファイルはおそらく作られない。生成した hello を起動するだけである。

つまり、シェルコマンドを起動するためのランチャーとして使われることもある。


makeの欠点

複雑な処理がしにくい。条件分岐やループは難しい。しょうがないので複雑なビルドプロセスは別のファイルのシェルスクリプトに書いたりする。

依存ファイルをワイルドカードで指定したりできない。 しょうがないのでMakefileを生成するスクリプトを書いたりする。

シェルコマンドはシェルスクリプトと違い1行=1セッションなので、シェル変数、環境変数をセットしたい場合は一行に書かなければならないのも辛い。

しょうがないのでautotoolsでconfigureスクリプト生成し、configureスクリプトがMakefileを生成し、makeでビルドするという一連の作業をする習慣ができた。

これは処理が複雑だしメンテナンスもしにくい。


rake - make in Ruby

rakeはRuby製のビルドツール

MacOSX Snow Leopard / Lion にはデフォルトでインストールされている。

構文はRubyで、目的はmakeとおなじく依存ファイルからターゲットを生成するビルドツールとして、あるいはランチャーとして使える。

ベースがRubyという汎用プログラミング言語なのでなんでもできる。ただしなんでもしすぎるのは良くない。


demo

rakefileにタスクを書いてrakeで起動する。

$ vim rakefile
$ rake      # process :default task
$ rake test # process :test task

SEE ALSO

Something went wrong with that request. Please try again.