LoginSignup
33
31

More than 5 years have passed since last update.

今話題の Makefile を Scheme で書く!をやってみよう (Ubuntu で)

Last updated at Posted at 2013-10-12

今巷で最もホットな話題は,あの 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.0guile-2.0-dev のどちらか片方は不要だったかもしれません.調べられないなう.誰かもし分かったら教えて下さい.)

ひとまずこれで ~/local/bin/make が出来上がり,今後 Makefile 内に Scheme のコードを記述することが出来ます.

make --version でバージョンが 4.0.0 になってることを確かめてみるといいかもです.

まず簡単に Scheme コードが書ける例を見てみましょう.

Makefile
$(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.

ってエラーでした.残念.

これ以上のことは試してません.

何か面白いことが出来たらいいですね.

References

33
31
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
31