「./configure」オプションの「--build」、「-host」、「-target」の違いは何ですか?


121

このスクリプトは、./configure3つのオプションを受け入れ--build--hostそして--target。私は彼らの役割を混乱させています。それらの違いと意味は何ですか?


Autotoolsはクロスコンパイルに間違ったツールチェーンを使用--host--buildます。私は2つのC ++プロジェクトを持っていますが、Autotoolsは非常に機能しているため、Android用にビルドすることは不可能です。ホストのツールチェーンを使用したテストの実行を要求します。
jww

回答:


109

で述べたように、このブログの記事とで示唆したGCCの設定規約--targetあなたはツールチェーンをコンパイルするときにのみ適用されます。使用するライブラリまたはバイナリの通常のクロスコンパイルを行っている場合

--build=the architecture of the build machine
--host=the architecture that you want the file to run on

ただし、ツールチェーン構築する場合、状況はさらに複雑になる可能性があります。以下は正しいと思います(ただし、クロスデバッガーを手動でコンパイルしたことはないとは言えません)。

あなたが持っているとしましょう:

  • すべてのコンパイルを実行するPowerPCビルドマシン
  • コードが実行されるmipsプロセッサを備えたいくつかの組み込みデバイス
  • フィールドでこれらのデバイスをデバッグするために使用するx86ラップトップ

組み込みデバイスで実行するデバッグサーバー(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アーキテクチャ環境で実行します。


11
「ホスト」と「ターゲット」に何を置くかを見つける方法は?
ブラック

4
「--target」はコンパイラーにのみ関連があるため、新しいコンパイラーの構築について話していると思います。*「ホスト」は、新しいコンパイラを実行する場所です。*「ターゲット」は、新しいコンパイラによって生成された実行可能ファイルが実行される場所です。
user1735594

--host = i686はここでは有効ではないので、これは間違った答えになりますか?
infoclogged 2017年

1
提供された回答は、コンパイルがMIPSターゲット用に行われたこと、およびこれがビルドであり、ホストがMIPSマシンのデバッガーであることを示しています。これは、デバッガ/コンパイラもpowerpcによってビルドされたことを意味しますか?これは私が別のユーザーから受け取ったコメントです(ネッド):ビルド=コンパイラーをコンパイルする場所、ホスト=コンパイラーを実行する場所、ターゲット=コンパイラーが生成するコード。参考:stackoverflow.com/questions/7088576/...は
supmethods

Nedによると、これはpowerpcがビルド/ホスト、デバッガのターゲットであるx86マシン、およびMIPSシステムとしてのターゲットの両方であることを意味するのではないでしょうか。「構築する」と「構築する」とは何ですか?gcc.gnu.org/onlinedocs/gccint/Configure-Terms.htmlを参照しています
supmethods 2018年

75

注:引数--targetは、コンパイラ(GCCなど)をビルドする場合にのみ意味があります。configureGCCをビルドする前に実行する場合:

  • --build:あなたが構築しているマシン
  • --host:あなたが構築しているマシン
  • --target:GCCがバイナリを生成するマシン

GCCのドキュメントホスト/ターゲットの特定のインストールノート):

ビルド、ホスト、ターゲットがすべて同じ場合、これはネイティブと呼ばれます。ビルドとホストが同じでターゲットが異なる場合、これはクロスと呼ばれます。ビルド、ホスト、ターゲットがすべて異なる場合、これはカナダと呼ばれます(カナダの政党や当時のビルドに携わっていた人物の背景を扱う理由が不明瞭なため)。ホストとターゲットは同じで、ビルドが異なる場合は、クロスコンパイラを使用して別のシステムのネイティブをビルドしています。これをホストxホスト、クロスネイティブ、またはクロスビルドネイティブと呼ぶ人もいます。ビルドとターゲットは同じでホストが異なる場合は、クロスコンパイラを使用して、ビルドしているマシンのコードを生成するクロスコンパイラをビルドしています。これはまれであるため、それを説明する一般的な方法はありません。これをクロスバックと呼ぶ提案があります。


2
これは明らかに--targetそれ自体がコンパイラではないプロジェクトには関係ありません。では、なぜ標準の構成オプションなのでしょうか。混乱しています。
dhardy 14

1
@dhardy:configure正確でクリーンなデザインの頂点ではありません。アプリケーション固有の機能のクリープの結果だと思います。
TimČas、2015

たとえば、「./ configure --build = powerpc --host = i686 --target = mips」を実行してgccを取得したい場合、出力は実行可能ですか?通常、gccはcコードをビルドして、多くのプラットフォームでさまざまな種類の結果を出力できる強力なツールです。ここで '--target = mips'を使用すると、指定したgccは機能を失いますか?
gfan 2018

また、config.guessファイルとconfig.subファイルを更新してコンパイラがより多くのターゲットプラットフォームを認識できるようにすることもできます。これらは、ここで入手できます。gnu.org
software
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.