O que o --prefix faz exatamente quando usado em ./configure?

8

Então, eu fiz uma pergunta simples que provavelmente vai me fazer parecer burro, mas estou aprendendo

Quando faço um

./configure --prefix/usr/bin/

O que o prefixo está fazendo? Isso é apenas instalar o pacote nesse local

E pode uma resposta dar mais de uma resposta elaborada para uma instalação complicada e explicar detalhadamente os prefixos e opções que a acompanham.

Se eu tivesse que executar uma instalação do apt-get, como eu o instalaria em um determinado local com o prefixo

Eu também vi

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install

Se o prefixo for chamado em ./configure por que ele está sempre sendo feito nesses dois exemplos?

Obrigado antecipadamente!

    
por hello moto 11.03.2017 / 04:38

2 respostas

11

Quando você instala o software com make install ou sudo make install , arquivos diferentes são colocados em diretórios diferentes. Os executáveis que fornecem comandos que o usuário deve executar geralmente vão em um diretório bin , as bibliotecas geralmente entram em um diretório lib , as páginas de manual geralmente entram em um diretório man e assim por diante.

Quando você executa ./configure , a opção --prefix permite especificar onde esses diretórios são . É chamado de --prefix porque permite que você forneça o prefixo que aparece nos caminhos de cada um dos diretórios onde os arquivos do programa ou da biblioteca que você está construindo devem ser instalados. A maioria dos scripts configure suportam --prefix , e omitindo e apenas executando ./configure é normalmente equivalente a ./configure --prefix=/usr/local .

Para responder mais detalhadamente, reproduzi duas seções da minha resposta para Como instalar o arquivo tar “globalmente”? (em Unix & Linux ), que abordam especificamente essa questão:

  

Configurando sua compilação

     

Quando você tiver o código-fonte compilado executando ./configure   e make , você normalmente usará make install (ou sudo make install )   para instalá-lo. Isso copia arquivos do diretório de compilação   no local de instalação. Quando a coisa que você está instalando fornece   comandos executáveis, esses executáveis são normalmente copiados em um   diretório que está em $PATH ou que você deve considerar adicionar a    $PATH .

     

Embora a criação e instalação de software seja geralmente tão simples quanto   executando ./configure , make , às vezes make check ou make test ,   e, em seguida, make install ou sudo make install , você às vezes   deseja passar opções para o script configure para configurar a compilação.   Em particular, como diz pfnuesel , é assim que você configura    onde o software será instalado. Mesmo que a etapa make install realmente instale o software, os locais onde   tudo será instalado são tipicamente estabelecidos no    ./configure step.

     

A opção mais comum para isso é --prefix . O prefixo padrão   quando você não disser configure o que usar, geralmente é /usr/local .   (Ocasionalmente, o código fonte de um programa ou biblioteca é padronizado   outro prefixo. Felizmente isso é raro.)

     

Portanto, ./configure é geralmente equivalente a ./configure --prefix=/usr/local .   Para instalar o software em seu diretório inicial, você pode usar ./configure --prefix=/home/galahad (se /home/galahad for   seu diretório home) ou --prefix="$HOME" . Então, claro, você deve   ainda construa e instale o software com make . Eu devo dizer que   nem todo o software que é distribuído na forma de código-fonte é construído este   caminho. Você deve sempre procurar documentação dentro do   arquivo de código-fonte.

     

O que --prefix significa

     

Quando você executa ./configure --prefix=directory , você está   indicando que o software deve ser instalado sob o   Diretório directory . Mas isso raramente, ou nunca, coloca arquivos soltos em directory . Em vez disso, ele coloca arquivos que servem diferentes   nos diferentes subdiretórios de directory . Se aqueles   subdiretórios não existem, eles os criam.

     

Os executáveis geralmente vão em directory/bin , embora eles   pode ir em directory/sbin se eles são comumente usados para   administração do sistema ou eles podem ir (mais raramente, nos dias de hoje) em    directory/games se forem jogos. Bibliotecas entram    directory/lib ou outro diretório com nomes semelhantes   %código%. Arquivos de cabeçalho entram   %código%. Páginas de manual entram   %código%. Arquivos de dados usados pelo software entram    directory/lib32 .

     

Isso é o que significa que directory/include é um prefixo . É o   diretório pai que contém os locais nos quais diferentes arquivos   será instalado. Assim, aparece como um prefixo no absoluto   caminhos da maioria dos arquivos e diretórios criados executando directory/man   ou directory/share .

     

Existem algumas exceções para isso. Configuração em todo o sistema   arquivos - que às vezes são criados ao instalar o software que   vai usá-los, embora nem sempre - geralmente vão em directory . Isso não é   normalmente afetado pela especificação de um prefixo diferente. Mesmo se você   instalar um monte de software em make install , ele ainda vai usar principalmente    sudo make install , e seu diretório /etc provavelmente será   inexistente, vazio ou contém muito poucos arquivos.

     

Em muitos sistemas, você pode encontrar mais informações sobre   layout do sistema de arquivos executando /usr/local . Se você estiver usando um GNU / Linux   sistema você pode estar interessado na Hierarquia do sistema de arquivos   Padrão .

    
por Eliah Kagan 01.10.2017 / 11:37
2

Ele informa a localização das coisas que são necessárias para configurar o pacote ou o software atual.

Como em um caso simples, ele pode informar o local das bibliotecas ssl:

--with-libssh2=/usr/local  #used in configuring nagios

e também informa quais pacotes não configurar, para fazer compilações adequadas do programa de acordo com o seu sistema:

--disable-shared  # used in configuring nagios
--disable-link-balancer  # used in configuring Firehol

Estas são apenas opções extras para fazer uma compilação adequada ao seu sistema. É o que eu penso. Me corrija se for outra coisa.

A opção --prefix=PREFIX instala arquivos independentes de arquitetura em PREFIX . Quando você executa um comando make install , as bibliotecas serão colocadas no diretório PREFIX/lib , executáveis no diretório PREFIX/bin e assim por diante.

Se esse argumento não for passado para o comando configure , o valor padrão será /usr/local .

    
por luv.preet 11.03.2017 / 09:52

Tags