rake に挑戦

[About “Rake Tutorial”][1] の [Introducing Rake][2] を試してみる。

環境は、Windows2000、[One-Click Installer 1.8.2-15][3]、[Borland C++ Compiler 5.5][4]。

Borland C++ Compilerを使うのは初めてなので、まず、[Borland C++ Compiler 5.5][4] の動作確認から。

hello.cpp を作成。

/* hello.cpp */
#include
main()
{
cout << "Hello, World!" << endl; return 0; } コンパイルして、 > bcc32 hello.cpp

実行する。

> hello.exe
Hello, World!

OK。

[チュートリアル][5] にしたがって、main.c、greet.h、greet.c、build.bat(チュートリアルではbuild.sh)を作成する。

main.c

#include “greet.h”
int main() {
greet (“World”);
return 0;
}

greet.h

extern void greet(const char * who);

greet.c

#include
void greet (const char * who) {
printf (“Hello, %s\n”, who);
}

build.bat

bcc32 -c -o main.obj main.c
bcc32 -c -o greet.obj greet.c
bcc32 -ehello main.obj greet.obj

build.batを実行する。

> build.bat
> hello.exe
Hello, World

コンパイルに成功して、hello.exeが作られる。
hello.exeを実行すると、Hello, World の文字が表示される。

main.c から main.obj が、greet.c から greet.obj が作られて、main.obj と greet.obj から hello.exe が作られる。

greet.c を変更したら greet.obj を更新しないと、hello.exe には、greet.c の変更は反映されないよ。
つまり、ファイル間に依存関係があるということ。

Rakefile では、依存関係は次のように記述する

file “main.obj” => [“main.c”, “greet.h”]

Rakefileを作る。

Rakefile

file ‘main.obj’ => [“main.c”, “greet.h”] do
sh “bcc32 -c -o main.obj main.c”
end

file ‘greet.obj’ => [‘greet.c’] do
sh “bcc32 -c -o greet.obj greet.c”
end

file “hello” => [“main.obj”, “greet.obj”] do
sh “bcc32 -ehello main.obj greet.obj”
end

rake hello を実行する。

> rake hello
bcc32 -ehello main.obj greet.obj
> hello.exe
Hello, World

成功だ。

greet.c の Hello を Hi に変更する。

#include
void greet (const char * who) {
printf (“Hi, %s\n”, who);
}

もう一度、rake hello。

> rake hello
bcc32 -c -o greet.obj greet.c
bcc32 -ehello main.obj greet.obj
> hello.exe
Hi, World

変更された greet.c はコンパイルした。
変更されていない main.c はコンパイルしない。

次回に続く。(たぶん)

[1]: http://docs.rubyrake.org/read/book/1
[2]: http://docs.rubyrake.org/read/chapter/1
[3]: http://rubyforge.org/frs/?group_id=167
[4]: http://www.borland.co.jp/cppbuilder/freecompiler/
[5]: http://docs.rubyrake.org/read/chapter/1

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください