回答:
で述べたように、このブログの記事とで示唆したGCCの設定規約、--target
あなたはツールチェーンをコンパイルするときにのみ適用されます。使用するライブラリまたはバイナリの通常のクロスコンパイルを行っている場合
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
ただし、ツールチェーンを構築する場合、状況はさらに複雑になる可能性があります。以下は正しいと思います(ただし、クロスデバッガーを手動でコンパイルしたことはないとは言えません)。
あなたが持っているとしましょう:
組み込みデバイスで実行するデバッグサーバー(gdbserverなど)を構成して構築します。
./configure --build=powerpc --host=mips
組み込みデバイスにパテを付け、「gdbserver:1234 a.out」を実行してデバッグを開始し、ポート1234でリッスンできるようにします。
次に、(gdbserverに接続して制御する)デバッグクライアントをビルドします。
./configure --build=powerpc --host=i686 --target=mips
これをx86ラップトップにコピーして、フィールドで "gdbclient embedded.device:1234"を実行してa.outプログラムをデバッグできるようにします。
これはすべて、上記のGCCリンクまたはカナダのクロスコンパイルに関するこのセクションを参照したいコンパイラにも当てはまります。
また、このAutoconfのマニュアルページによると、「ターゲットのデフォルトはホスト、ビルドするホスト、config.guessの結果にビルドされる」ため、実際にはビルド、ホスト、またはターゲットが指定されていない場合があります。
つまり、上--build
でコードをビルドし--host
、--target
アーキテクチャ環境で実行します。
注:引数--target
は、コンパイラ(GCCなど)をビルドする場合にのみ意味があります。configure
GCCをビルドする前に実行する場合:
--build
:あなたが構築しているマシン--host
:あなたが構築しているマシン--target
:GCCがバイナリを生成するマシンGCCのドキュメント(ホスト/ターゲットの特定のインストールノート):
ビルド、ホスト、ターゲットがすべて同じ場合、これはネイティブと呼ばれます。ビルドとホストが同じでターゲットが異なる場合、これはクロスと呼ばれます。ビルド、ホスト、ターゲットがすべて異なる場合、これはカナダと呼ばれます(カナダの政党や当時のビルドに携わっていた人物の背景を扱う理由が不明瞭なため)。ホストとターゲットは同じで、ビルドが異なる場合は、クロスコンパイラを使用して別のシステムのネイティブをビルドしています。これをホストxホスト、クロスネイティブ、またはクロスビルドネイティブと呼ぶ人もいます。ビルドとターゲットは同じでホストが異なる場合は、クロスコンパイラを使用して、ビルドしているマシンのコードを生成するクロスコンパイラをビルドしています。これはまれであるため、それを説明する一般的な方法はありません。これをクロスバックと呼ぶ提案があります。
--target
それ自体がコンパイラではないプロジェクトには関係ありません。では、なぜ標準の構成オプションなのでしょうか。混乱しています。
configure
正確でクリーンなデザインの頂点ではありません。アプリケーション固有の機能のクリープの結果だと思います。
--host
し--build
ます。私は2つのC ++プロジェクトを持っていますが、Autotoolsは非常に機能しているため、Android用にビルドすることは不可能です。ホストのツールチェーンを使用したテストの実行を要求します。