![]() | |
作者 | コミュニティ |
---|---|
開発元 | フリーソフトウェア財団 |
最新版 |
複数
|
プログラミング 言語 | m4, C |
対応OS | クロスプラットフォーム |
プラットフォーム | GNU ほか |
内包元 | GNUオペレーティングシステム |
対応言語 | English |
ライセンス | GNU General Public License version 2 |
公式サイト |
www |
GNU Autotools、またはGNU Build Systemとは、主にUnix系オペレーティングシステム (OS) においてソフトウェアパッケージ開発を行うための、ツール及びフレームワークの一種である。このツールを使用することにより、多種多様なUNIX互換環境にパッケージを対応させることが容易になる。 Autotoolsは主に Autoconf/Automake/Libtool の3つから成り立っている[1]。他の関連するツールには GNU make、GNU gettext、pkg-config、GNUコンパイラコレクションなどがある。
AutotoolsはGNUツールチェーンの一部であり、多くの自由ソフトウェアやオープンソースパッケージで広く使用されている。そのコンポーネントツールは自由ソフトウェアであり、GNU General Public License の下でライセンスされているが、特別なライセンス例外によりプロプライエタリソフトウェアでの使用が許可されている[2][3]。
ソフトウェアプログラムを移植可能にするのは難しい場合がある。コンパイラはシステムによって異なり、一部のシステムでは特定のライブラリ関数が欠落していることがある。コンパイラファイル(Cヘッダなど)の名前が異なる場合もある。共有ライブラリは、さまざまな方法でコンパイルおよびインストールされることがある。プラットフォームの違いを処理する1つの方法は、条件付きでコンパイルされたコード(つまり#ifdef
経由)を記述することだが、ビルド環境が多種多様であるため、この方法はすぐに管理不能になる。Autotoolsは、この問題をより管理しやすい方法で解決するように設計されている。
Autotoolsを用いて作成されたパッケージは容易に導入が可能である。典型的な場合、インストールまでの全工程が自動化されており、ソースコードを展開した後、以下のコマンドを入力するだけで全てが完了する。
$ ./configure && make && make install
多くのUNIX用オープンソースソフトウェアで、この方式が採用されている。
configurationスクリプト(configure
)はビルド環境の構築を一括でおこなうシェルスクリプトである[4]。
プログラムのビルドは複数のツールを連携させておこなわれるが、その際、ビルド設定(例: 拡張命令フラグ)を外部から取り込み全てのツール間にそれを一貫して適用しなければならない。これを手動でおこなうことは時間の浪費でありバグの温床である。このビルド環境構築を一括して自動でおこなうスクリプトが、慣例的にconfigure
と名付けられるconfigurationスクリプトである[4]。パッケージの利用者はconfigure
を実行するだけでビルド環境が構築できる。
configure及び付属のスクリプト・Makefileなどは標準的なUNIXコマンドだけを使用しており、パッケージの利用者は、パッケージそのものの構築・運用に必要なソフトウェアを除いて、Autotoolsの為に特別なソフトウェアを導入する必要はない(Windows系OSではUNIXコマンドが標準で含まれていない為、別途Services for UNIXやCygwinなどのUNIX互換環境のインストールが必要である)。
また、自動的な環境検査が好ましくなかったり特別な設定が必要な場合、環境変数またはコマンド引数でconfigureの動作を調整できる。代表的なオプションを以下に説明する。
これ以外にも多くのオプションがあり、少ないパッケージでも10以上、多いパッケージでは数十から100以上の設定項目がある。利用者の設定に矛盾があったり、環境の機能に不足があれば診断情報を出力する。また、クロスコンパイル対応や、構築用の作業ディレクトリをソースコードと異なるディレクトリに設定する機能がある。
Autoconf (autoconf
) はconfigurationスクリプトを自動生成するツールである[5]。
ビルド環境の自動構築をおこなうconfigurationスクリプト (configure
) はそれ自体が時に数千行に渡る巨大なスクリプトになる。これを手動で記述し維持することは時間の浪費でありバグの温床である。このconfigure
生成を自動でおこなうツールがAutoconfである[5]。
Autoconfはconfigure.ac
を入力とし、configure
を出力とする[6]。ユーザーがこのconfigure
を実行することでビルド環境が構築される。
m4言語のマクロとシェルスクリプトの断片で記述された入力ファイルconfigure.ac(古いバージョンではconfigure.in)を、autoconfがm4を用いて置換しconfigureを得る。 最終出力configureはBourne Shell用のシェルスクリプトで、数百行から数千行の長さがある。
以下に、簡単なconfigure.acの例を示す。
AC_INIT(hello, 1.9, address) # 必須設定 AC_CONFIG_SRCDIR([hello.c]) # このパッケージではhogeを使用可能である configureに--with-hogeが追加される。 #(実際には、この後に利用者が--with-hoge=yesとした場合の動作定義を記述する必要がある) AC_ARG_WITH(hoge, [Use hoge]) AC_PROG_CC # Cコンパイラの設定 configureが環境変数CCを使用する AC_OUTPUT([Makefile]) # Makefile.inを雛形にしてMakefileを生成
出力のconfigureは非常に長いので掲載しない。この場合、一般的なオプションはサポートされる。利用者の要求に応じてhogeを利用するがどうかを決定する。また、Cコンパイラを探し実行方法を確認し、その結果得られたコマンド名・必要オプションなどをMakefileに出力する。
GNU Automake(automake
)はMakefile.in
ファイルを自動生成するツールである[7]。
automakeはプログラムとソースコードの関係などが記述されたMakefile.am
ファイルを入力とし、Makefile.in
を出力する。
HelloWorldプログラムで例を示す
#Makefile.am #実行バイナリファイルの名前はhello bin_PROGRAMS = hello #helloのソースコードはhello.c,hello.h hello_SOURCES = hello.c hello.h
出力のMakefile.inは非常に長いので掲載しないが、期待した内容が得られる。 すなわち、configureを実行することでMakefileが生成される。このMakefileを用いてmakeコマンドを使用すると、hello.cをCコンパイラでコンパイルし、次いで標準ライブラリとリンクし、helloの実行ファイルが得られる。make installでは、helloはあるべき場所(ほとんどの場合は/usr/local/bin)にインストールされることになる。
configure
. When run, configure
creates several files, replacing configuration parameters in them with appropriate values." 3 Making configure
Scripts - Autoconf - gnu.org. 2022-06-11閲覧.
configure
script with Autoconf, you need to write an Autoconf input file configure.ac" 3 Making configure
Scripts - Autoconf - gnu.org.
Makefile.in
files" Automake - gnu.org. 2022-06-11閲覧.
『GNU Autoconf/Automake/Libtool』 Gary V. Vaughan, Ben Elliston, Tom Tromey, Ian Lance Taylor著 でびあんぐる監訳 ISBN 4-274-06411-5