クロスコンパイラを使用してあるアーキテクチャでコードをコンパイルし、実行可能ファイルを別のアーキテクチャにコピーして実行する基本的な概念を理解します。ただし、./configure; make; make install
クロスコンパイルコンテキストでは、一般的なシーケンスの最後のステップを特定することはできません。
たとえば、Ubuntu PCを使用してARMデバイス用のlibusbをクロスコンパイルしたいとします。 libusbのソースコードをダウンロードして設定を実行して、次のことを行いました。
> ./configure --disable-udev --host=arm-linux-gnueabihf CC=/usr/bin/arm-linux-gnueabi-gcc
> make
この時点では、すでにARMアーキテクチャ用のlibusb用にコンパイルされたバイナリがたくさんあります。理想的には、これらのバイナリをARMデバイスにコピーして実行して、ターゲットmake install
ディレクトリに手動でコピーする必要がないようにしたいと思います。ただし、これはUbuntuシステムからビルド環境全体をコピーする必要があることを意味し、これは時間とディスク容量の無駄のようです。それとも、バイナリと適切なMakefileを集めてコピーすることもできますが、それはあいまいです。
make install
ターゲットアーキテクチャを活用するよりエレガントな方法はありますか?
ベストアンサー1
はい、少なくともここで使用されているようなAutotoolsベースのビルドシステムの場合(おそらく他の一部でも)、次のものをサポートします。DESTDIR
変数を使用してにインストールできます/
。
mkdir destdir
make DESTDIR="${PWD}/destdir" install
これにより、ターゲットバイナリ(および同伴ファイル)が提供され、ターゲットdestdir
デバイスの/
。