% ./configure % make # make installという操作でマシン、OS依存性を検出してソースコードをコンパイルし、インストールできる機構を 作るのを助けるツール群。
% aclocal -I (includedir) % autoconf % automake -a作る必要があるのは以下の2種類
configure.inを作るための入力ファイル。まず、パッケージの最上層で
% autorescanを実行し、"configure.scan"を作成する。このファイルを参考にしてconfigure.acを作る。
asseの場合
AC_PREREQ(2.57) # autoconfのバージョンチェック
AC_INIT(asse, 0.1, e-mail-address) # パッケージ名、バージョン番号、バグ報告先
AM_INIT_AUTOMAKE(asse,0.1) # automake用初期化
AC_CONFIG_SRCDIR([src/lattice.cc])
# AC_CONFIG_HEADERS([config.h]) # automake用には次のマクロを用いる。
AM_CONFIG_HEADER(config.h)
# AC_PROG_MAKE_SETはAM_INIT_AUTOMAKEで自動的に呼びだされる。
# AC_PROG_MAKE_SET # パッケージが階層的ディレクトリ構造を持つとき
# 必要なプログラムをチェック
AC_PROG_CXX
AC_PROG_CC
AC_PROG_F77
AC_PROG_INSTALL
AC_PROG_RANLIB
AC_CHECK_LIB([fftw], [fftwnd_one]) # fftwが必要。
ACX_LAPACK # lapackが必要
AM_PATH_GSL(1.0) # GSLが必要
AC_CONFIG_FILES([common.mk Makefile
src/Makefile
program/Makefile
program/pw/Makefile]) # configureで生成する設定ファイル達(Makefile等)
# foo.in ---> foo
AC_OUTPUT # 設定ファイル出力
asseの場合、最上層のMakefile.amは、次のように記述した。
SUBDIRS = src program
単に存在するディレクトリを示しただけ。
src/Makefile.amは、次のような形に記述した。
lib_LIBRARIES=libasse.a libasse_a_SOURCES = coordinate.cc \ (途中省略) \ fft3d.h pkginclude_HEADERS = tinyarray.cc lattice_vectors.cc \ (途中省略) \ tetrahedron.h tinyarray.h transveclist.h vector3d.h wienIO.h wienkpoints.h
このディレクトリにはライブラリlibasse.aを作るためのソースコードが格納されている。1行目の
lib_LIBRARIES=libasse.a
はこのディレクトリでlibasse.aを作ることを宣言している。 lib_LIBRARIESという単語は$prefix/libにインストールすべきライブラリを意味する(らしい). libasse_a_SOURCESにはlibasse.aを作るのに必要なソースファイルを指定している。(ヘッダファイル を含む。) pkginclude_HEADERSは$prefix/include/(package名)にインストールするヘッダファイル を指定している。なお、package名はconfigure.acのAC_INITで指定した名前である。 pkginclude_HEADERSの代わりにinclude_HEADERSを用いると$prefix/includeにインストールされる。