Blog

Module::Install::ForC で C のプログラムを簡単に構築する

http://github.com/tokuhirom/p5-module-install-forc

Module::Install のアーキテクチャを利用した configure/SCons 等のサブセットをつくりました。
記法は SCons を参考にしており、Rake のような黒魔術的でとっつきにくい記法ではなく、シンプルでわかりやすい記法になっています(もちろん主観ですが、Rake の記法は Rake を知らない人にとって非常にとっつきにくく、見通しがわるいというのが個人的見解です。慣れても見通しがいいとはおもいませんが。。。)。
Perl Monger がちょっとした C のコードを書くときに便利なのではないかとおもいます。Module::Install をつかってるので inc/ もいっしょに配布すれば、perl5.8.0 以上さえあればうごくということになります。便利です。
最近は SCons をもっぱらつかっていたのですが、Perl で書けた方がファイル操作とかでなやまなくていいので、こういうものをつくってみたというわけ(これは単に perl のライブラリに自分がなれているからというだけ)。

PROBLEM

  • I want to write C program.
  • I don't want to write plain Makefile
  • I don't want to use configure
    • fat, hard to write, version problems, etc.
  • I love SCons
    • but it is written by python

SOLUTION

I wrote Module::Install::ForC. It's based on M::I power and SCons like DSL.

You can write your Makefile.PL like this:

use inc::Module::Install;

my $env = env_for_c();
$env->program('sl', ['sl.c']);

WriteMakefileForC();

Just this!

Then you will get the following Makefile.

all: sl

clean:
        rm sl sl.o
        rm Makefile
        /bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*

sl: sl.o
        cc   -fstack-protector -L/usr/local/lib -o sl sl.o

sl.o: sl.c
        cc  -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64  -c -o sl.o sl.c

And you can construct the shared library.

use inc::Module::Install;

my $env = env_for_c();
$env->shared_library('hello' => ['hoge.c']);

WriteMakefileForC;