3

多種多様なオープンソース プロジェクトがソース コードで配布され、./configure && makeアプローチでコンパイルされることになっています。しかし、クロスコンパイルしたい場合、これらの 2 つのステップのどの段階で、バイナリを取得するターゲット プラットフォームを指定すればよいのでしょうか?

一般的にconfigure/makeと関係がありますか、それともすべてのプロジェクトに固有のものですか? プロジェクト、ライブラリ、またはコンソール アプリケーションをコンパイルし、ターゲットを指定する例は何ですか?

多くのプロジェクトの Web サイトには、「このプログラムのクロス コンパイル」専用の Web ページがあることを知っています。そのため、プロジェクト固有の設定のようです。しかし、プロジェクトは依然として configure/make を使用しています。

4

1 に答える 1

4

システムが標準の GNU autoconf を使用している場合は、make 時ではなく、configure 時に常にクロスコンパイルを定義します。configure スクリプトがクロスコンパイルしていることを認識していない場合、サポートされているものとサポートされていないものを探してシステムを調べたときに、誤った回答が得られる可能性があります。

クロスコンパイルは、設定する --build、--host、および --target フラグの目的です。--build を設定する必要は決してありません: これは常に configure を実行しているシステムを参照し、configure はそれ自体を把握できます。通常のクロス コンパイルでは、--host も設定せず、--target をクロス コンパイル ターゲットに設定します。必要に応じて、CC (C プログラムの場合) や CXX (C++ プログラムの場合)、LD、AR、STRIP、およびその他のいくつかを設定する必要がある場合もあります。残念ながら一部のパッケージではサポートされていませんが、個人的には別のディレクトリでビルドすることも好みます):

tar xzf foo-1.1.tar.gz
mkdir obj
cd obj
../foo-1.1/configure --target=... CC=...-gcc CXX=...-g++ ...
make

これはすべて基本的なautoconf / automakeによって提供されるため、すべてのプロジェクトが同じ方法でそれを行うことに注意してください(ただし、私の経験では、クロスコンパイルを定期的に試行しない多くのプロジェクトは、うまく機能しないような何か間違ったことをします) .

于 2013-03-09T14:06:59.837 に答える