크로스 컴파일: 빌드(비대상) 시스템에서 "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

관련 정보