義仁ページ 計算機メモ scons
義仁ページ 計算機メモ scons
scons
2010年9月29日水曜日
Binaryを作る標準は昔 make だったが、最近は scons が幅をきかせてきているらしい。scons のどこが make より優れているのか理解していないが、次の仕事で使うライブラリはこの scons を利用することになっている(いつの間にかそうなっていた)。 make であれば簡単にできることをいちいち調べるのは煩わしい。以下、まとめ。
scons がどのように binary 等を作るのかを指定する file は通常、SConstruct, Sconstruct, or sconstruct である。これらは python で書かれている。
scons は次の順番で SConstruct を探す。
1../site_scons が存在すれば sys.path に付け足す。
2../site_scons/site_init.py が存在すれば実行する。
3../site_scons/site_tools/ が存在すれば toolpath に付け足す。
いわゆる make clean は scons -c
C や C++ へ -DXXX を渡すには SConstruct で環境に入れておく。以下の CPPDEFINES に相当。この環境のところで細かいコントロールをするようだ。
1.env = Environment(ENV = os.environ,
2. tools = ['default', 'root_dict', 'process_dir'],
3. BUILDERS = {},
4. BUILDDIR = os.path.join('#build', subdir),
5. INCDIR = '#include',
6. LIBDIR = os.path.join('#lib', subdir),
7. BINDIR = os.path.join('#bin', subdir),
8. DATADIR = '#data',
9. EXTDIR = '#externals',
10. EXTINCDIR = os.path.join('$EXTDIR', 'include'),
11. EXTLIBDIR = os.path.join('$EXTDIR', 'lib', subdir),
12. EXTBINDIR = os.path.join('$EXTDIR', 'bin', subdir),
13. CCFLAGS = ['-Wall'],
14. CPPDEFINES = {'_PACKAGE_': '\\"$PACKAGE\\"',
15. 'BELLE_NAMESPACE':None,
16. 'TRASAN_DEBUG':None,
17. 'TRASAN_DEBUG_DETAIL':None,
18. 'TRASAN_WINDOW_GTK':None,
19. 'TRASAN_WINDOW_GTK_HOUGH':None},
20. CPPPATH = ['include', '$EXTINCDIR', sysconfig.get_python_inc()],
21. LIBPATH = ['$LIBDIR', '$EXTLIBDIR'],
22. TOOLS_LIBS = {},
23. TOOLS_LIBPATH = {})
通常 header files は *.h や *.hh だが、他のものも header files として include directory に install して欲しいときは、...、これは私の環境特有のことなので省略。(私用メモ : ./site_scons/site_tools/process_dir.py の header_files に付け足す。
自分特有の library を pkg-config を使って付け足したいときは、(http://www.scons.org/wiki/UsingPkgConfig より)
1.env.ParseConfig('pkg-config --cflags --libs gtk+-2.0')
上記ページにある以下の方法はうまく動かなかった。原因は追求していない。
1.# use GTK
2. CCFLAGS = ' `pkg-config --cflags gtk+-2.0` '
3. LINKFLAGS = ' `pkg-config --libs gtk+-2.0` '
4.
5. env = Environment(CCFLAGS=CCFLAGS, LINKFLAGS=LINKFLAGS)