クロスコンパイル:ビルド(非ターゲット)システムで「make install」を実行します。

クロスコンパイル:ビルド(非ターゲット)システムで「make install」を実行します。

クロスコンパイラを使用してあるアーキテクチャでコードをコンパイルし、実行可能ファイルを別のアーキテクチャにコピーして実行する基本的な概念を理解します。ただし、./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デバイスの/

答え2

さて、@Stephen Kittが述べたようににDESTDIR渡すことができますmake install。ここでは試してみることができる別の可能なオプションを提供します。

  • configureスクリプトの実行--prefix=/your/custom/install/dir/path

カスタム--prefixパスを渡してスクリプトを設定できます。これにより、実行するたびにそのディレクトリmake installにインストールされます。prefix

例:

./configure --disable-udev --host=arm-linux-gnueabihf CC=/usr/bin/arm-linux-gnueabi-gcc --prefix=/your/custom/path
  • make install次に実行DESTDIR

make installDESTDIRターゲットファイルをインストールする前に追加する変数をサポートしています。

例:

make DESTDIR=`pwd`/DESTDIR install

関連情報