autotoolsメモ

GNUで配布しているソフトウェアのように、
  % ./configure
  % make
  # make install
  
という操作でマシン、OS依存性を検出してソースコードをコンパイルし、インストールできる機構を 作るのを助けるツール群。

設定ファイル

  % aclocal -I (includedir)
  % autoconf
  % automake -a
  
作る必要があるのは以下の2種類

configure.ac

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                                # 設定ファイル出力
  

詳しい説明

Makefile.am

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にインストールされる。