GNU Autoconf は、コードベースのビルドと、その結果のファイルのパッケージ化またはインストールに必要なファイルを生成するconfigure スクリプトを生成するソフトウェア開発ツールです。Autoconf は、 Automake、Libtool、Autoheader などのツール とともに、GNU ビルドシステムの一部です。
Autoconf は、ビルドするコードベースのプログラミング言語に依存しません。ただし、主にC、C++、Fortran、Erlang、Objective-Cで使用されます。
configureスクリプトは、特定のターゲットシステムへのインストール用にソフトウェアパッケージを設定します。ターゲットシステム上で一連のテストを実行した後、configureスクリプトはテンプレートからヘッダーファイルとmakefileを生成し、ソフトウェアパッケージをターゲットシステムに合わせてカスタマイズします。

開発者は、configureスクリプトの望ましい動作を、 GNU m4言語で記述した命令リストを「configure.ac」というファイルに記述することで指定します。一般的なconfigureスクリプトの命令を記述するための、定義済みのm4マクロライブラリが用意されています。Autoconfは、「configure.ac」内の命令を移植可能なconfigureスクリプトに変換します。ビルドを実行するシステムにAutoconfがインストールされている必要はありません。Autoconfは、通常ソフトウェアに同梱されているconfigureスクリプトをビルドするためにのみ必要です。
Autoconfは、1991年の夏、David Mackenzieがフリーソフトウェア財団での活動を支援するために開発されました。その後数年間で、様々な作者による機能強化が加わり、移植性の高いフリーソフトウェアまたはオープンソースソフトウェアを作成するための最も広く利用されているビルド構成システムとなりました。
Autoconf は、 Perlで使用される Metaconfig パッケージに似ています。X Window System(X11R6.9 まで) で以前使用されていたimakeシステムと密接な関連がありますが、その考え方は異なります。
Autoconfの移植性に対するアプローチは、バージョンではなく機能をテストすることです。例えば、SunOS 4のネイティブCコンパイラはISO Cをサポートしていませんでした。しかし、ユーザーまたは管理者がISO C準拠のコンパイラをインストールしている可能性はあります。純粋なバージョンベースのアプローチではISO Cコンパイラの存在を検出できませんが、機能テストのアプローチではユーザーがインストールしたISO Cコンパイラを検出できます。このアプローチの根拠は、以下の利点を得ることです。
Autoconfは、多くのPOSIXシェル構文が古いシェルに移植できないことや、そのバグに関する詳細なドキュメントを提供しています。また、シェル構文のマクロベースの代替であるM4SHも提供しています。[2]
Autoconfは、ソースコードの特定の本体を特徴付けるファイルconfigureの内容に基づいてスクリプトを生成します。このスクリプトを実行すると、ビルド環境がスキャンされ、下位のスクリプトが生成されます。このスクリプトは、他の入力ファイルや、通常はビルド環境に適した出力ファイル()に変換します。最終的に、Autoconfは を用いてソースコードから実行可能プログラムを生成します。
configure.acconfigureconfig.statusMakefile.inMakefilemakeMakefile
Autotools の複雑さは、ソース コード本体が構築される状況の多様性を反映しています。
make。これにより、変更によって影響を受けるソース コード本体の部分のみが再コンパイルされます。.in実行するだけで十分です。config.statusmakeconfigureソース コードの本体を別のコンピュータにコピーした場合は、 ( を実行config.status) と を再実行するだけで十分ですmake。(このため、Autotools を使用するソース コードは通常、 が生成するファイルなしで配布されますconfigure。)configure.acファイルも.in変更する必要があり、後続のすべての手順も実行する必要があります。ファイルを処理するために、autoconf はm4マクロ システムの GNU 実装を使用します。
Autoconf には、 Cヘッダー ファイルautoheaderの管理に役立つ、Autoconf の初期入力ファイルを作成できる 、プログラムで使用される C プリプロセッサ識別子をリストできる
などの補助プログラムがいくつか付属しています。 autoscanifnames
Autoconfは時代遅れの技術を採用しており、多くのレガシーな制約があり、configure.acスクリプトの作者にとって単純なシナリオを不必要に複雑にしてしまうという批判もあります。特に、Autoconfの弱点としてよく挙げられるのは以下の点です。
これらの制限のため、GNUビルドシステムを使用していたいくつかのプロジェクトは、CMakeやSConsなどの別のビルドシステムに切り替えました。[3] [9]