web-dev-qa-db-ja.com

Linuxでの典型的な./configureは何をしますか?

すべてがメイクファイルで指定されているのに、なぜ必要なのですか?

63
Mask

通常、実行時の構成スクリプトは次のことを行います。

  • ソフトウェアをインストールするマシンに関する詳細を確認してください。このスクリプトは、システム上の多くの依存関係をチェックします。特定のソフトウェアが適切に機能するためには、マシンにすでに多くのものが存在している必要があります。システムに主要な要件のいずれかがない場合、configureスクリプトはexitになり、必要なものを取得するまでインストールを続行できません。

  • 次のステップで使用するMakefileを作成します。

62
codaddict

通常、メイクファイルと「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にはプロジェクトをビルドするために必要なものがすべて含まれていません。

32
Edwin Buck

Configureスクリプトは、テンプレートからMakefileをビルドし、コードをインストールする場所や、プログラムのビルドに使用される(C、C++、Fortran、...)コンパイラに必要な定義などを置き換えます。理論的にはすべてを1つのステップで実行できますが、段階的に行う方が簡単なさまざまな構成が可能である点が異なります。 (たとえば、利用可能なマルチコアマシンで大規模なプログラムをビルドする場合、特定の数の並列コンパイルが発生するように指定できますが、これは構成方法の問題ではありません。)

5
Donal Fellows