クロスコンパイラを使用してあるアーキテクチャでコードをコンパイルし、実行可能ファイルを別のアーキテクチャにコピーして実行する基本的な概念を理解します。ただし、./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 install
DESTDIR
ターゲットファイルをインストールする前に追加する変数をサポートしています。
例:
make DESTDIR=`pwd`/DESTDIR install