autotoolsとは
autotoolsの概要
autotoolsとは、コンパイル実行環境(OS、コンパイラ、ライブラリなどの依存関係)を自動的に検出して、ソースコードのコンパイルからインストールまでの工程を自動化するツール群です。
UNIX系OSにおいてオープンソースのソフトウェアパッケージの開発及び配布方法として用いられています。
autotoolsを利用して作成されたパッケージは、ソースコードを展開した後、以下の3つのコマンドを実行することでコンパイルからインストールまで完了することができます。
# ./configure
# make
# make install
autotoolsの構成
autotoolsは主に「autoconf / automake / libtool」という3つのツールで構成されます。
autoconfとは
autoconfは、開発環境の定義を記述したファイル「configure.ac」から「configure」スクリプトを生成するためのツールです。
autoconf-2.13の頃では「configure.in」からconfigureスクリプトを作成していましたが、autoconf-2.57くらいから「configure.in」よりも「configure.ac」が推奨されています。
automakeとは
automakeは、「Makefile.am」ファイルからMakefileのテンプレートとなる「Makefile.in」ファイルを生成するツールです。
Makefile.amファイルには、プログラムとソースコードの関係などを記述します。
libtoolとは
libtoolは、システムに依存するライブラリを自動で構築するためのツールです。
各種ライブラリを生成する手順におけるプラットホームへの依存性を隠蔽することができます。
configureスクリプトについて
configureスクリプトは、テンプレートである「Makefile.in」ファイルを参照して、GNU Makefile標準に準拠したMakefileを作成します。
autotoolsによる環境構築
ここでは概要についての説明を記述します。
(ページ下部の「autotools実行サンプル」で環境構築の実行サンプルを記述していますので参照ください。)
autotoolsによるプロジェクト作成作業の全体像は以下の通りです。
- makefile.amの作成/編集をする。
- configure.acを作成/編集をする。
- autoheaderコマンドを実行する。(プリプロセッサ用ヘッダファイル雛形の生成)
- aclocalコマンドを実行する。(automake用m4マクロの生成)
- automakeコマンドを実行する。(makefile.inの生成)
- autoconfコマンドを実行する。(configureスクリプトの生成)
(1)Makefile.amを作成/編集する。
プロジェクトの対象ディレクトリ(サブディレクトリを含む)にMakefile.amを作成します。
autoscanコマンドを実行する前にMakefile.amを作成しておくことで、configure.scanファイルに生成するMakefileのパスなどを自動設定することができます。
Makefile.amの作成と編集のやり方については、詳細は以下のページをを参照してください。
(2)configure.acを作成/編集する。
autoscanコマンドを実行すると、「configure.scan」ファイルが生成されます。
「configure.scan」を「configure.ac」に名前を変更します。
$ autoscan
$ mv configure.scan configure.ac
その後、configure.acにプロジェクト用の設定を記述します。
詳細は以下のページをを参照してください。
(3)autoheaderコマンドを実行する
autoheaderコマンドを実行することで、プリプロセッサマクロ用ヘッダファイルのテンプレート「config.h.in」を生成します。
$ autoheader
(4)aclocalコマンドを実行する。
aclocalコマンドを実行することで、automake用のマクロファイル「aclocal.m4」を生成します。
aclocalコマンドはacinclude.m4などの情報からaclocal.m4を生成します。
$ aclocal
(5)automakeの実行
makefile.amを入力ファイルとしてmakefile.inの雛形を生成します
「--add-missing」オプションを指定すると、「install-sh」や「mkinstalldirs」など必要になるファイルをautomakeが自動で作成します。
また、コマンド実行前に、「COPYING」などのautomakeが要求するファイル・ディレクトリを用意しておきます。
$ touch INSTALL NEWS README COPYING AUTHORS ChangeLog
$ automake --add-missing --copy
(6)autoconfを実行する。
autoconfを実行することで、configure.inからconfigureスクリプトを生成します。
$ autoconf
libtoolの利用
libtoolを利用してライブラリを作成する場合のプロジェクト作成作業の全体像は以下の通りです。
aclocalコマンドを実行する前に、設定とlibtoolizeコマンドの実行を行います。
- makefile.amの作成/編集をする。
- configure.acを作成/編集をする。
- autoheaderコマンドを実行する。(プリプロセッサ用ヘッダファイル雛形の生成)
- ★libtoolizeコマンドを実行する。
- aclocalコマンドを実行する。(automake用m4マクロの生成)
- automakeコマンドを実行する。(makefile.inの生成)
- autoconfコマンドを実行する。(configureスクリプトの生成)
libtool用の設定
libtoolizeコマンドを実行する前に、configure.acに以下を追加します。
これでlibtoolを使用することを明示化します。
AM_PROG_LIBTOOL
libtoolizeコマンドの実行
libtoolコマンドの実行すると、config.guess,config.sub,ltconfig,ltmain.sh,ltcf-c.shなどのファイルが生成されます。
$ libtoolize --force
aclocalコマンド実行後にlibtoolizeコマンドを実行すると、再度aclocalコマンドを実行するように警告されることがあります。
その場合にはaclocalコマンドを実行してください。
【備考:Linux向け】
libtoolizeではなく「glibtoolize」を利用する場合には以下の通りです。
Linuxディストリビューションによっては、パッケージ管理ツールでlibtoolizeが見つかないことがあります。
その場合にはglibtoolizeコマンドを取得して、実行します。
$ glibtoolize --force
autotoolsのmakeコマンド
autotoolsによって生成されたMakefileは、デフォルトで以下のコマンドを実行できます。
コマンド | 説明 |
---|---|
make clean | ビルドしたファイルを削除する。 |
make install | プログラム、ライブラリをインストールする。 |
make dist | 配布ファイル (XXX.tar.gz) を作成する。 |
make distcheck | 配布ファイルをテストする。 |
autotools実行サンプル
autotoolsの実行手順の例を記載します。
- autotools最小構成サンプル
- ディレクトリにひとつのソースコードのみ存在している環境のautotools実行例です。
- autotoolsソースディレクトリ構成サンプル
- トップディレクトリ配下のsrcディレクトリにソースコードが存在している環境のautotools実行例です。
- autotoolsライブラリ構成サンプル
- libtoolを利用してライブラリを作成するautotools実行例です。
- autotoolsオープンソースのライブラリ構成サンプル
- OSS公開されているソースコードをライブラリとしてプロジェクトに組み込むautotools実行例です。