コマンドラインからのコンパイル、実行を楽するために rake を使ってみる。

C# プログラムを書いてから、コンパイル、実行するとき、以下のようにコマンドラインからコマンドを実行しています。

% cat test.cs
using System;

class Test {
    static void Main() {
        Console.WriteLine("Hello C#");
    }
}
% mcs test.cs -out:a.exe
% mono a.exe
Hello C#

もしくは、

% mcs test.cs -out:a.exe && mono a.exe
Hello C#

-out オプションで実行ファイル名を指定しているのは、実行ファイルがいくつもフォルダに作られないようにするためです。

Project Euler の問題を解くときには、コマンドラインで実行するコマンドが決まりきっているため、もう少し楽できないか考えてみました。自作スクリプトを書いて更新日付がもっとも新しい C# プログラムをコンパイル、実行するようにすることを考えたのですが、勉強のために rake を使ってみました。

task :default => :compile_and_run

task :compile_and_run do
  sh "mcs #{ENV['p']}.cs -out:a.exe"
  sh 'mono a.exe'
end

実行結果です。

% cat test.cs
using System;

class Test {
    static void Main() {
        Console.WriteLine("Hello C#");
    }
}
% rake p=test
mcs test.cs -out:a.exe
mono a.exe
Hello C#

コマンドの指定が少しだけ楽になりました。次に、カレントディレクトリの *.cs ファイルのうち、更新日時がいちばん新しいファイルを取得するようにしてみます。

実行結果です。

% rake
mcs test.cs -out:a.exe
mono a.exe
Hello C#

少しだけコンパイル、実行が楽になりました。rake 便利ですね。