[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