--help’でその概要を読むことができます。INSTALL.autoconfファイルにも一般的なインストールのための情報が記述されています。‘configure’スクリプトは沢山のUNIXツールを使用します。Systemsを参照してください。UNIXではないOS上での設定方法を記述してあります。ツールの代わりに全部自力で設定を行わなければなりません。ビルドするディレクトリビルドするディレクトリを別のところに設定する際には,cdコマンドでそこへ移動し,プレフィックスを,GMPのソースが置いてあるディレクトリへのパスをくっつけてconfigureを実行します。/my/build/dir/my/sources/gmp-6.1.2/configureこの場合,‘make’プログラムがコンパイルに必要な全ての情報(VPATH)を保持しているわけではありません。SunOSやクソトロいSolarisのmakeコマンドはバグのおかげで上記のように別のディレクトリでのビルドができません。makeを使って下さい。--exec-prefix--prefixオプションを使うと,GMPをインストールするディレクトリを指定できます。デフォルトのディレクトリは‘/usr/local’です。--exec-prefixオプションを指定すると,libgmp.aのようにCPUアーキテクチャごとに生成されるファイルを異なるディレクトリに設置できます。このオプションではドキュメントのようにアーキテクチャに依存しないファイルも指定ディレクトリに設置できますが,分離することも可能です。gmp.hはlibgmpを生成する際に作られますので,アーキテクチャ依存のファイルになります。従ってビルド時には$prefix/includeと$exec_prefix/includeの両方をコンパイラに周知しておく必要があります。--disable-staticデフォルトでは静的ライブラリも動的ライブラリも両方ビルドされますが,片方だけビルドすることもできます。動的ライブラリは実行ファイルを小さくしたい時に有効で,動作しているプロセス間で同じGMPのコードを共有します。CPUのタイプによっては,関数呼び出しに要する時間のため,若干低速になります。--build=CPU-VENDOR-OS通常のネイティブコンパイルを行うには,対象システムを‘--build’で指定できます。デフォルトでは‘./configure’時において,‘./config.guess’の実行結果を利用します。‘./config.guess’で正確なCPUタイプを知ることもできますが,コンパイル時にこのオプションを使って明示的にCPUタイプを指定することもできます。下記のように指定します。--build=ultrasparc-sun-solaris2.7どんなケースでも‘OS’の部分は重要で,これによってlibtoolが動的ライブラリを生成する方法を指定できます。‘OS’が不明の場合は‘./config.guess’を動作することで簡単に判明します。ライブラリを動かしたいシステムを‘--host’に指定します。m68k用のバイナリを生成しています。--host=m68k-mac-linux-gnuコンパイラツールは最初にホストシステムのタイプを見に行きます。m68k-mac-linux-gnu-ranlibが指定された場合,標準のranlibが使用されます。これによって,ネイティブツールと共存しているクロスコンパイル用のツール群が指定できるようになります。プレフィックスは‘--host’に指定でき,これは‘m68k-linux’のようにエイリアスが利用できます。ツール類はここで指定するのではなく,クロスコンパイル用のccを含むパス(PATH)が通っているだけで十分です。同じファミリーに属する異なるCPUに対してコンパイルを行うには,クロスコンパイルとして行うこともできますが,ネイティブコンパイラにオプションをつけるだけで済ますことも可能です。どんなケースでも,‘./configure’はビルドするシステムの影響は受けずに実行できますので,ビルドを実行するシステム上では動作しない,新しいCPU向けのバイナリの生成も可能です。いかなる場合でも,コンパイラは標準Cのmain関数を含むソースから,実行ファイル(の形式はともかく)を生成できなければなりません。オブジェクトファイルはlibgmpの構成物になるだけですが,‘./configure’コマンドは,例えば実行対象のホストシステムで動作する関数を確定するために,リンクテストを使うことになります。現状ではクロスコンパイルの際に‘--build’オプションの指定がないと警告が出ます。PATHが通ったディレクトリにクロスコンパイル用のccしかない場合は正しくビルドシステムのタイプを認識できない可能性があるからです。‘--target’オプションは,GMPのクロスコンパイル用としては適切ではありません。よってコード生成の対象となるアーキテクチャを指定しています。GMPのような通常のプログラムやライブラリは,‘--host’部分だけ指定すれば事足ります(以前のGMPは‘--target’を不正確に使っていました)。一般的に,ライブラリをできるだけ高速に動作させたい時には,GMPの設定を,使用している正確なCPU種別に合わせる必要があります。いえ,そのCPUファミリーの古いタイプで動かすこともあるのか,他のCPUファミリーでは遅くなることもあり得るのか,古いCPUか新しいCPUか,といったことを示すことになりますが,最良の方法は,正しいマシンタイプに対してGMPをビルドすることです。下記に挙げるCPUは特別なサポートがなされています。どんなコードでどんなコンパイラオプションが使えるのかは,configure.acで確認して下さい。‘vax’,上記のリストに上がっていないCPUについては汎用Cコードが適用されます。汎用Cコードのビルドアセンブラコードの利用に問題が発生したり,利用したくない時には--disable-assemblyを指定し,汎用Cコードを使用してビルドして下さい。汎用Cコードを使うと計算速度がガクッと遅くなってしまいますが,可搬性は上がりますし,多少問題含みの環境でも動かすことはできるようになります。--enable-fat--enable-fatオプションを使うとx86系のシステムでは“ファットバイナリ”ビルドができるようになります。これによって,CPUに対して最適化された基盤関数群が利用できるようになります。CPU用のコードを持ちつつ,パフォーマンスの最適化が適宜できるようになる訳です(このオプションは将来的に他のアーキテクチャに対しても使えるようになる予定です)。Interface)をサポートしています。これはデータ型のサイズや関数呼び出しに関係してきます。デフォルトではGMPは利用できるABIのうち最適なものを選択しますが,下記のように特定のABIを指定することもできます。CFLAGSデフォルトのCコンパイラは,gccをはじめ,通常使われることの多いコンパイラの中から選択して指定します。‘CC=whatever’というオプションで‘./configure’に渡され,デフォルトでは選ばれないものも使用可能になります。デフォルトのコンパイラのフラグは,CPUやCコンパイラによって変わってきます。通常は‘CFLAGS="-whatever"’というオプションで‘./configure’に渡され,デフォルトとは異なるフラグや,GMPが感知しえない適切なフラグを指定することができるようになります。‘./configure’実行中にその指定値が表示され,生成されたMakefileの中に書き込まれます。オプションのの値を変えたり何か追加したりしたい時にはまずこのデフォルト値を確認するのがいいでしょう。‘CFLAGS’といったオプション値を,複数のABIをサポートするシステムで指定したい時には,明示的に‘ABI=whatever’というオプションをしてしておくことで,GMPが間違ったフラグやアセンブラコードを各ABIに指定することを防ぎます。‘CFLAGS’に与えます(GMPがその値を知っていた場合)。‘CC=gcc’とすると,強制的にGCCがCコンパイラとして指定され,そのデフォルト値(とデフォルトのABI)が付加されます。CPPFLAGSプリプロセッサが必要とするフラグ,例えば‘-D’による定義や,‘-I’によるインクルードファイルのディレクトリ指定は,‘CFLAGS’ではなく,‘CPPFLAGS’で指定して下さい。‘CFLAGS’の両方を指定してコンパイルすることもできますが,プリプロセッサは前者しか使いません。プリプロセッサとコンパイラの指定可能なフラグには相違があるのが普通だからです。いくつかのconfigure時のテストでも,プリプロセッサは分離して実行されます。CC_FOR_BUILDビルド時に利用されるプログラムはコンパイルされ,ホスト指定のデータテーブルを生成するために実行されます。‘CC_FOR_BUILD’オプションはこの目的のために使用されるコンパイラの指定ができます。どんなABIやモードでも特段指定の必要がないオプションで,実行ファイルを構築するためだけのオプションです。デフォルトでは,指定済みの‘CC’,探索して見つかった動作可能なCコンパイラ,例えば‘cc’や‘gcc’になります。foo.c’のようにフラグなしでコンパイルするだけなので,‘CC_FOR_BUILD’に対するフラグは利用できません。-whatever"’のように,このオプション指定に取り込んで下さい。--enable-cxxGMPをC++で使えるようにするには‘--enable-cxx’オプションでコンパイルします。これによりC++コンパイラを要求するようになります。使うと,C++コンパイラが使用可能な時のみサポートされますので便利です。Libraries)。これにより,ダイナミックリンクを利用しているCプログラムがC++標準ライブラリを要求したり,C++コンパイラがCプログラムのリンクを要求したりすることがなくなります。libgmpxx.laは内部でligmp.laを使っているため,どちらも同じGMPバージョンのものでなくてはなりません。バージョンアップの度にルーチンの名前変更などがありますので,異なるバージョンのGMPを使うと,挙動がおかしくなるというより,シンボル未定義が頻発することが多くなると思います。mangling)やランタイムサポートの違いで必ずトラブります。‘CXXFLAGS’に指定するのが普通のやり方です。‘CXX’のデフォルト値は望ましいC++コンパイラの候補の先頭にあるものが選ばれます。g++が使える場合はこれが筆頭になります。‘CXXFLAGS’のデフォルト値は‘CFLAGS’のうち,‘-g’を除いたものになります。-O2’が‘-O2’になり,他のコンパイラでは‘-g’が単なるオプションなし,となります。‘CFLAGS’を流用するのは‘gcc’と‘g++’を共に利用する際に便利だからで,コンパイラオプションが大体共通なのです。ちなみに,‘CXX’と‘CC’を全く同一の値にすることは望ましくありません。gccの場合,foo.ccをC++プログラムであると理解はしますが,g++のように正しくリンカを実行して,C++オブジェクトファイルから実行ファイルや共有ライブラリを生成することはできません。--enable-alloca=<choice>GMPは一時メモリ領域を,下記に挙げる3つの方法で確保します。‘--enable-alloca=malloc-reentrant’というオプションで指定可能です。グローバル変数として使用可能なヒープ領域オプション指定を簡便にするため,下記のような簡易指定も可能です。‘--disable-alloca’は‘no’と指定したものと同じ意味になります。‘malloc-reentrant’を指定。これがデフォルトです。‘malloc-notreentrant’を指定。allocaは再入可能で,高速に実行できるのでお勧めです。スタック上に小さいメモリブロックを確保します。大きなメモリブロックが欲しい場合はmalloc-reentrantを利用して下さい。再入可能でスレッドセーフです。‘malloc-notreentrant’は高速だが再入可能性が不要の時に使用します。この二つのmallocを利用する方法は,mp_set_memory_functionsで指定したメモリ割り当て関数を使います。デフォルトではmalloc関数やその類似の関数が使われます。Debugging)。アルゴリズムを使って実行されます。FFTは特別デカいオペランドに対してのみ適用されるものなので,コードサイズを小さくしたいのであれば,このオプションを使って使用不可にしておくこともできます。--enable-assertこのオプションを利用してライブラリ内の整合性のチェックができるようになります。Profiling,そのうちの一つがこのオプション指定で使えるようになります。MPN_PATHmpnサブルーチンチン用のアセンブラプログラムは多様なものが提供されており,各CPU用のものは自動で検索されますが,このオプションを使うとmpn用のコードのフォルダを指定できるようになります。下記は‘sparcv8’用の指定です。generic"この例では,まず最初にv8コードを読みに行き,次にsparc32コード(v7用),最後に汎用Cコードを読みに行きます。ハードウェアに詳しいユーザが特定の目的で利用したい時には,異なるパスを指定しても結構です。通常は無用のオプションになります。doc/gmp.texiにあり,Texinfoフォーマットで記述されています。Infoフォーマットの文書‘doc/gmp.info’はこのGMPのTARボールの中に入っています。HTMLを生成することができます(但し,TeXやTexinfoツールが使える環境であること)。DocBookやXML形式の文書はTexinfoのmakeinfoプログラムから生成できます。追記的なメモについてはdoc以下に置いてあります。