交叉编译:在构建(非目标)系统上运行“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 提到的,你可以传递DESTDIRmake 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 installDESTDIR

make install支持DESTDIR将被添加到已安装的目标文件之前的变量。

例子:

make DESTDIR=`pwd`/DESTDIR install

相关内容