tmp/autoconf/クロスコンパイル
configure のオプション(--host, --build, --target) → http://d.hatena.ne.jp/maminus/20100129
わかりやすいってすばらしい。
--build | コンパイルPC |
--host | makeして作ったプログラムの実行環境 |
--target | クロス開発におけるターゲット環境 |
いっつも build と host が逆に思えてしまって間違えるのだよな、感覚的に…。
まあ「ビルドマシン」みたいな言い方があることを考えたら自ずと host がその逆だと気づけそう。気づいてゆきたい。target はいかにもな名前で思わせぶりだけど(それこそクロスコンパイラ的なやつでもない限り)滅多に使わないようです…。
本家 autoconf マニュアルの該当部分→ 14.1 Specifying target triplets
まあ、部分的におおまかにフィーリング無断翻訳すると…
ほかに、ユーザーはコマンドライン引数でシステム名(system type)を configure に指定することもできます。これが必要になるのはクロスコンパイル時です。クロスコンパイルの最も複雑なケースでは3つのシステム名が必要とされます。
- --build=build-type
- パッケージを設定(configure)し、コンパイルするシステム名です。デフォルトでは config.guess の実行結果となります。host-type と異なる build-type を指定するとクロスコンパイルモードが有効になります。
- --host=host-type
- パッケージが動作するシステム名です。デフォルトではビルドマシンと同じです。build-type と異なる host-type を指定し、さらに build-type を(--build オプションで)明示的に指定するとクロスコンパイルモードが有効になります。
- --target=target-type
- パッケージ内のコンパイラツールがどのシステム向けにコード生成をするのかを指定するシステム名です。デフォルトでは host と同じです。
config.guess の判定結果を上書きしたい場合は --host ではなく --build を使います。
--host ではクロスコンパイルが有効になってしまうからです。
歴史的理由により、--host を指定する際は、とにかく必ず --build も指定してください(将来は修正されるはずです)。
つまり、クロスコンパイルモードに入るには、以下のようなコマンドを使います。
ちなみに --host を指定していないとき、指定したコンパイラの生成したコードが(ビルドマシン上で)実行できない場合は configure が失敗します。たとえば以下のような configure は(x86 Linux 上では)失敗します。