Cross-compilation: executando 'make install' no sistema de compilação (não-alvo)

2

Eu entendo o conceito básico de usar um compilador cruzado para compilar o código em uma arquitetura e depois copiar o executável para outra arquitetura para executá-lo. Mas não consigo descobrir o último passo da sequência típica ./configure; make; make install no contexto da compilação cruzada.

Por exemplo, eu quero fazer uma compilação cruzada da libusb para um dispositivo ARM usando meu Ubuntu PC. Eu baixei o código fonte do libusb, rodei configure e make:

> ./configure --disable-udev --host=arm-linux-gnueabihf CC=/usr/bin/arm-linux-gnueabi-gcc
> make

Neste ponto, eu tenho um monte de binários compilados pela libusb para a arquitetura ARM. Idealmente, eu quero copiar esses binários para o dispositivo ARM e executar make install para que eu não precise copiá-los manualmente em seus diretórios de destino. Mas isso significaria que eu teria que copiar todo o ambiente de compilação do computador Ubuntu, o que parece ser uma perda de tempo e espaço em disco. Ou eu poderia reunir apenas os binários e os Makefiles apropriados e copiá-los, mas isso parece desajeitado.

Existe uma maneira mais elegante de aproveitar make install na arquitetura de destino?

    
por Dan Laks 08.12.2016 / 03:12

2 respostas

4

Sim, pelo menos para sistemas de criação baseados no Autotools, como usados aqui (e provavelmente outros); eles suportam uma variável DESTDIR que pode ser usada para instalar em outro lugar que não seja / .

mkdir destdir
make DESTDIR="${PWD}/destdir" install

Isso fornecerá os binários de destino (e os arquivos correspondentes) em destdir ; você pode copiá-lo para o dispositivo de destino / .

    
por 08.12.2016 / 03:28
2

OK, Como o @Stephen Kitt mencionou, você pode transmitir DESTDIR para make install . Aqui vou fornecer mais uma opção possível que você pode tentar,

  • Execute o script configure com --prefix=/your/custom/install/dir/path

Você pode transmitir --prefix junto com seu caminho personalizado para configurar o script. Para que, sempre que você executar make install , ele seja instalado no diretório prefix .

Exemplo:

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

make install suporta a variável DESTDIR que será pré-anexada ao arquivo de destino instalado.

Exemplo:

make DESTDIR='pwd'/DESTDIR install
    
por 08.12.2016 / 09:59