現在、autoconf
/automake
ツールチェーンの使用方法を学んでいます。私はここでワークフローの一般的な理解をしているようです-基本的に、実行可能なconfigure
ファイルを生成するconfigure.ac
スクリプトがあります。次に、生成されたconfigure
スクリプトをエンドユーザーが実行してMakefile
sを生成し、プログラムをビルド/インストールできるようにします。
したがって、一般的なエンドユーザーのインストールは基本的に次のとおりです。
./configure
make
make install
make clean
さて、ここで私は混乱しています:
開発者として、自動生成された構成スクリプトが実行されず、エラーが発生することに気づきました。
config.status: error: cannot find input file: `somedir/Makefile.in'
ConfigureスクリプトはgenerateMakefile.in
と想定されているので、これは私を混乱させます。いくつかの答えを探し回って、これはautogen.sh
スクリプトで修正できることを発見しました。これは、基本的にautoconf
環境の状態を「リセット」します。典型的なautogen.sh
スクリプトは次のようになります。
aclocal \
&& automake --add-missing \
&& autoconf
じゃ、いいよ。しかし、私が生涯にわたって無数のtarballをダウンロードしたエンドユーザーとして、私はneverがautogen.sh
スクリプトを使用する必要がありました。私がしたことは、tarballを解凍して、通常のconfigure/make/make install/make cleanルーチンを実行することだけでした。
しかし、現在singautoconf
である開発者は、autogen.sh
を最初に実行しない限り、configure
は実際には実行されないようです。エンドユーザーがautogen.sh
を実行する必要はないはずだと思ったので、これは非常に混乱します。
では、なぜ最初にautogen.sh
を実行する必要があるのですか-configureスクリプトがMakefile.in
を見つけるために?なぜconfigureスクリプトは単にそれを生成しないのですか?
Autotoolsユーティリティを本当に理解するには、それらがどこから来たかを覚えておく必要があります。それらは、(a)ソースコードリポジトリ(CVS、Gitなど)から作業し、ソースコードを含むtarファイルまたは同様のもの、およびそのtarファイルをダウンロードサイトに配置すること、および(b)ソースコードtarファイルを取得し、システムでそのソースコードをコンパイルし、結果のバイナリを使用するエンドユーザー。明らかに、グループ(a)の人々もコードをコンパイルし、結果のバイナリを使用しますが、グループ(b)の人々は、グループ(a)の人々が必要とする開発用のすべてのツールを持っていないか、必要としません。
したがって、ツールの使用はこの分割に向けられており、グループ(b)の人々はautoconf、automakeなどにアクセスできません。
Autoconfを使用する場合、通常は_configure.ac
_ファイル(autoconfへの入力)をソース管理にチェックインしますが、autoconfの出力、configure
スクリプトはチェックインしません(一部のプロジェクトはconfigure
スクリプトをチェックインします。もちろん、あなたへ)。
Automakeを使用する場合、一般的に_Makefile.am
_ファイル(automakeへの入力)をチェックインしますが、automake:_Makefile.in
_の出力はチェックインしません。
configure
スクリプトは基本的に、システムでパッケージが必要とする場合と必要としない場合のあるさまざまなオプション要素を探します。これらの要素はどこにあるかなどを示します。この情報が見つかったら、それを使用してさまざまな_XXX.in
_ファイル(通常はのみではありませんが、_Makefile.in
_)をXXX
ファイル(たとえば、Makefile
)に変換します。
したがって、手順は一般的に次のようになります。_configure.ac
_と_Makefile.am
_を記述してチェックインします。ソースコード管理チェックアウトからプロジェクトをビルドするには、autoconfを実行して__configure.ac
_からconfigure
を生成します。 automakeを実行して、_Makefile.in
_から_Makefile.am
_を生成します。 _Makefile.in
_からMakefile
を生成するには、configureを実行します。 makeを実行して製品をビルドします。
ソースコードをリリースする場合(ソースコードをリリースするオープンソース製品を開発している場合)、autoconfとautomakeを実行してから、ソースコードをconfigure
および_Makefile.in
_ファイルにバンドルして、ソースコードリリースをビルドするには、makeとコンパイラーが必要で、autotoolsは必要ありません。
Autoconfとautomake(および使用する場合はlibtool)を実行する順序は難しい場合があるため、ソース管理からビルドされる開発者が使用するためにソース管理にチェックインされるautogen.shやautoreconfなどのスクリプトがありますが、これらはソースコードリリースのtarファイルなどからビルドする人には不要/使用されません。
Autoconfとautomakeはしばしば一緒に使用されますが、独自の_Makefile.in
_を記述したい場合は、automakeなしでautoconfを使用できます。