すべてがmakefileで指定されているのに、なぜそれが必要なのですか?
3 に答える
通常、実行時のconfigureスクリプトは次のようになります。
ソフトウェアがインストールされるマシンに関する詳細を確認してください。このスクリプトは、システムへの多くの依存関係をチェックします。特定のソフトウェアが正しく機能するためには、マシン上にすでに多くのものが存在している必要がある場合があります。システムに主要な要件のいずれかが欠落している場合、configureスクリプトは
exit
インストールを続行し、それらの必要なものを取得するまでインストールを続行できません。Makefile
次のステップで使用するを作成します。
通常はメイクファイルと「configure.h」を生成するスクリプトを実行します。
スクリプトはマクロ言語である言語「m4」で書かれています。トップレベルのマクロは、autoconf.ac または (古いシステムでは) autoconf.in にあります。これらは、下位レベルのマクロを含んで展開され、実際のテストに展開され、小さなプログラムまたはタスクを作成して、システムの種類を確認します。
たとえば、 AC_CHECK_HEADER([myheader.h], ...) は、次のような小さな C プログラムを生成する可能性があります。
#include "myheader.h"
int main(int argc, char** argv) {
return 0;
}
プログラムがコンパイルされた場合、チェックは「合格」と見なされ、それ以外の場合は「失敗」と見なされます。このようなチェックのステータスは、多くの場合 config.h ファイルに反映されます。合格チェックでは、config.h に次のような行が見つかる場合があります。
#define HAVE_MYHEADER_H 1
失敗したテストでは、次のように見えるかもしれません
#define HAVE_MYHEADER_H 0
AM_INIT_AUTOMAKE マクロで autoconf を使用するように構成されている場合、テスト結果を含む変数がエクスポートされている場合、Makefile はテストの結果を参照することもできます。したがって、必要なライブラリがいくつかの異なる典型的な場所にある場合、または標準ツール (tar、ar など) の 1 つで「機能するもの」の構文が異なる場合、または優先ツールが利用できない場合、Makefile は次のようになります。さまざまなライブラリの場所、さまざまなツール構文、またはさまざまなツール セットを使用して、プロジェクトを適切にビルドできます。
そのため、Autotools プロジェクト (configure / make / make install) を扱う場合、Makefile には実際にはプロジェクトのビルドに必要なすべてが含まれているわけではありません。「configure」と入力すると、システムに明確に一致するように Makefile.in テンプレートから生成されます。
configureスクリプトは、テンプレートからMakefileをビルドし、コードをインストールする場所や、プログラムのビルドに使用される(C、C ++、Fortranなど)コンパイラーに必要な定義などに置き換えます。理論的には、すべてを1つのステップで実行できますが、段階的に実行する方が簡単なさまざまな構成が可能です。(たとえば、使用可能なマルチコアマシンを使用して大規模なプログラムを構築する場合は、特定の数の並列コンパイルが発生するように指定できます。これは、構成方法には関係ありません。)