今巷で最もホットな話題は,あの Lisp 方言の Scheme を Makefile の中で使うって話です.
GNU make が 3 年ぶりにメジャーアップデートされ,そのいくつかの変更点の中で Guile って処理系を使って Scheme が記述出来るようになったよ〜,というのがあります.
BSD make の方,お許しください.
Lisp は神の言語 であり,それをあのしち面倒臭い Makefile の中で記述出来るようになったというのです.いやぁこれは素晴らしいですね.きっと素晴らしいに違いありません.
Ubuntu 13.10 がそろそろ出る頃ですが,今私のマシンは Ubuntu 13.04 なのでそれで話をします.
Ubuntu 13.04 で build-essentials
パッケージをインストールすると GNU make 3.81 がインストールされます.なので Make 4.0 を先取りで試すために手動でビルドしましょう.野良ビルドはあんまりよろしくないような話も聞きますが (Gent○○方面から),まぁあんまり気にし過ぎてもしょうがないような気がします.
ここに現時点での make のセットアップコマンドのログが置いてあります.make 4.0 を make 3.81 を使ってビルドする,ちょっと,こう,何と言うか楽しいですね.
echo 'export PATH=$HOME/local/bin:$PATH' >> $HOME/.zshenv # or $HOME/.bash_profile
source $HOME/.zshenv # or $HOME/.bash_profile
sudo apt-get install guile-2.0 guile-2.0-dev
mkdir -p $HOME/local/bin
mkdir -p $HOME/local/src
cd $HOME/local/src
wget http://ftp.gnu.org/gnu/make/make-4.0.tar.gz
tar xzf make-4.0.tar.gz
cd make-4.0
./configure --prefix=$HOME/local
make
make install
guile 2.0 のパッケージをインストールして (※guile-2.0
と guile-2.0-dev
のどちらか片方は不要だったかもしれません.調べられないなう.誰かもし分かったら教えて下さい.)
ひとまずこれで ~/local/bin/make
が出来上がり,今後 Makefile 内に Scheme のコードを記述することが出来ます.
make --version
でバージョンが 4.0.0 になってることを確かめてみるといいかもです.
まず簡単に Scheme コードが書ける例を見てみましょう.
$(guile "all:")
echo $(guile (string-append "unk" "ksy"))
これそのままコピペしたらあかんですよ.タブ文字を使って下さい.echo ...
の前に.Makefile ってその辺しんどいね.
これで make
コマンド実行してみましょう.unkksy
と echo されましたか?
string-append
という関数については自分でググって見てください.
$(guile ...)
と書いたら ...
の部分が Scheme のコードとして,Guile という処理系で処理されてそれがそのまま使えるんですね.すばらです!!
ただ,私の試した範囲ではさすがに
$(guile "all:\n\techo \"unkksy\"")
はダメでした.
make: *** No rule to make target 'echo', needed by 'all'. Stop.
ってエラーでした.残念.
これ以上のことは試してません.
何か面白いことが出来たらいいですね.