2006年08月31日

開発メモ

 久しぶりに計算機ネタ.

 autotoolsを使った開発で,自作/他者作のライブラリを簡単に使う方法.

最近は,pkg-configというツールを使って,C(C++)のインクルードパスやライブラリパスを指定するのが一般的になってきている.例えばgtkであれば,

% pkg-config --cflags gtk
-I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include
% pkg-config --libs gtk
-rdynamic -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm
のように,--cflagsオプションをつけることでコンパイルオプション,--libsを指定することでリンクオプションを標準出力に出力してくれる.これを使って
% gcc -o test.o -c `pkg-config --cflags` test.cc
% gcc -o test test.o `pkg-config --cflags`
とすることで,煩雑なリンクオプションを直接指定せずともコンパイルとリンクが可能になる.

 さて,これをautotoolsで使う場合はどうすればいいか.pkg-config扱えるライブラリであれば,configure.in中に,PKG_CHECK_MODULESマクロを使って記述すれば可能となる.例えば上記のようにgtkであれば

PKG_CHECK_MODULES(GTK,gtk)
と記述する.第一引数は,指定したライブラリが見つかった場合にコンパイルオプション等を代入するシェル変数のプレフィクスで好きなものを指定してよい.第二引数がpkg-configの引数として渡すライブラリの名前である.デフォルトの動作では,見つかった場合は指定したプレフィクスをつけたシェル変数に各オプションを代入し,見つからなかった場合はエラーを出力して止まるようになっている.
上記のように指定してライブラリが見つかった場合は,GTK_CFLAGSにコンパイルオプションが,GTK_LIBSにリンクオプションが代入されているので,
CPPFLAGS="${GTK_CFLAGS} ${CPPFLAGS}"
LIBS="${GTK_LIBS} ${LIBS}"
とすれば,以後のコンパイル,リンクには必要なオプションが必ず付与されて実行される.

trackbacks

trackbackURL: