AutoconfとAutomakeは、Unixの進化の問題を解決するために設定されました。
Unixがさまざまな方向に進化したため、移植可能なコードを望んでいた開発者は次のようなコードを書く傾向がありました。
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
Unixがさまざまな実装(BSD、SystemV、多くのベンダーフォーク、後のLinuxおよびその他のUnixライクなシステム)に分かれたため、特定のブランドのオペレーティングシステムに依存しないコードを書くためにポータブルコードを書きたい開発者にとって重要になりました、ただしオペレーティングシステムによって公開される機能。Unixバージョンでは、「送信」システムコールなどの新機能が導入され、他のオペレーティングシステムでは採用されるため、これは重要です。ブランドとバージョンをチェックするコードのスパゲッティを使用する代わりに、開発者は機能ごとの調査を開始したため、コードは次のようになりました。
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
90年代にソースコードをコンパイルするためのほとんどのREADMEファイルは、config.hファイルを編集し、システムで使用可能な適切な機能をコメントアウトするか、テストされた各オペレーティングシステム構成の標準config.hファイルを出荷するように開発者に指摘しました。
このプロセスは面倒でエラーが発生しやすく、これがAutoconfの成り立ちです。Autoconfは、config.hの人間による編集プロセスを、オペレーティングシステムの機能を調査するツールに置き換えることができる特別なマクロを備えたシェルコマンドで構成される言語と考える必要があります。
通常、configure.acファイルにプロービングコードを記述してから、autoconfコマンドを実行し、このファイルを使用済みの実行可能なconfigureコマンドにコンパイルします。
その./configure && make
ため、実行すると、システムで利用可能な機能を調査し、検出された構成で実行可能ファイルをビルドしていました。
オープンソースプロジェクトがソースコード管理システムを使用して開始したとき、configure.acファイルをチェックインすることは意味がありましたが、コンパイル(configure)の結果はチェックインしませんでした。autogen.shは、正しいコマンド引数を指定してautoconfコンパイラーを呼び出す小さなスクリプトにすぎません。
-
Automakeは、コミュニティの既存のプラクティスからも成長しました。GNUプロジェクトは、Makefileのターゲットの標準セットを標準化しました。
make all
プロジェクトをビルドします
make clean
プロジェクトからすべてのコンパイル済みファイルを削除します
make install
ソフトウェアをインストールします
- 以下のようなもの
make dist
とは、make distcheck
配布用のソースを準備し、結果は完全なソースコードパッケージしたことを確認します
- 等々...
何度も繰り返される定型文がたくさんあったため、準拠するメイクファイルを作成するのは面倒です。したがって、Automakeは、autoconfと統合し、「ソース」Makefile(Makefile.amという名前)を処理して、MakefileをAutoconfに渡すことができる新しいコンパイラでした。
automake / autoconfツールチェーンは、実際には他の多くのヘルパーツールを使用し、他の特定のタスクのために他のコンポーネントによって拡張されます。これらのコマンドを順番に実行する複雑さが増すにつれて、すぐに実行できるスクリプトの必要性が生まれました。これがautogen.shの由来です。
私の知る限り、Gnomeはこのヘルパースクリプトautogen.shの使用を導入したプロジェクトでした