SCons
参考リンク
Gnu Make の親戚みたいなやつです。Makefile の代わりに SConstruct ファイル (Python のファイル) を書くことでソースコードのコンパイルをやってくれます。Makefile と異なるのは依存関係を明示的に書く必要がないという点でしょうか。
SConstruct ファイルを書く
SConstruct ファイルの文法は Python のようです。
フラグをつけてコンパイルする場合
env = Environment(CCFLAGS = '-g -DMY_DEBUG') env.Program(target = 'foo', source = ['foo1.c', 'foo2.c'])
ライブラリもビルドする場合
srcs_foo = Split(""" foo1.c foo2.c foo3.c """) srcs_bar = Split(""" bar1.c """) libs_bar = Split(""" m foo """) path_libs_bar = Split(""" . """) env = Environment(CCFLAGS = '-g -O4', LIBS=libs_bar, LIBPATH=path_libs_bar) env.Library(target = 'foo', source = srcs_foo) env.Program(target = 'bar', source = srcs_bar)
Split を使っていますが libs_bar = ['m', 'foo'] などと書いても同じですし、LIBS=['m', 'foo'] のように直接書いても良いです。
複数プログラムをビルドする場合
srcs_foo = Split(""" foo1.c foo2.c foo3.c """) srcs_bar1 = Split(""" bar1.c """) srcs_bar2 = Split(""" bar2.c """) libs_bar = Split(""" m foo """) path_libs_bar = Split(""" . """) env = Environment(CCFLAGS = '-g -O4', LIBS=libs_bar, LIBPATH=path_libs_bar) env.Library(target = 'foo', source = srcs_foo) env.Program(target = 'bar1', source = srcs_bar1) env.Program(target = 'bar2', source = srcs_bar2)
コンパイルしたバイナリをインストールする場合
下記を付け加えます。
env.InstallAs(['../../bin/bin_bar1', '../../bin/bin_bar2'], ['bar1', 'bar2']) Alias('install', '../../bin/')