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

29

Então, eu só tinha uma pergunta simples que provavelmente me deixaria burra, mas estou aprendendo

Quando eu faço um

./configure --prefix/usr/bin/

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

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

Se eu fosse executar uma instalação do apt-get, como instalá-lo em um determinado local com prefixo

Eu também vi

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install

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

Agradeço antecipadamente!


fonte
Algumas informações aqui: GNU padrões de codificação: Variáveis Diretório
steeldriver
verificar resposta atualizada
luv.preet
freetds.org/userguide/config.htm , isso vai ajudá-lo mais
luv.preet
Revisores: trata-se de instalar software . Ele tem três votos fechados fora do tópico como "não sobre o Ubuntu". Se o fechamento for de alguma forma consistente com qualquer política real do site , sugiro comentar. Caso contrário, isso provavelmente será reaberto, mesmo se estiver fechado.
Eliah Kagan 02/10/19

Respostas:

32

Quando você instala o software com make installou 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 entram em um bindiretório, as bibliotecas geralmente em um libdiretório, as páginas de manual geralmente em um mandiretório e assim por diante.

Quando você executa ./configure, a --prefixopção permite especificar onde estão esses diretórios . É chamado --prefixporque permite fornecer o prefixo que aparece nos caminhos de cada um dos diretórios em que os arquivos do programa ou da biblioteca que você está construindo devem ser instalados. A maioria dos configurescripts suporta --prefix, e omiti-lo e apenas executar ./configurenormalmente é equivalente a ./configure --prefix=/usr/local.

Para responder isso de maneira mais completa, reproduzi duas seções da minha resposta em Como instalar o arquivo tar "globalmente"? (no Unix e Linux ), que abordam essa questão especificamente:

Configurando sua compilação

Quando você tem o código-fonte que é compilado executando ./configure e make, geralmente você usa make install(ou sudo make install) para instalá-lo. Isso copia os arquivos do diretório de construção para o local da instalação. Quando a coisa que você está instalando fornece comandos executáveis, esses executáveis ​​geralmente são copiados para um diretório que esteja $PATHou que você deve considerar adicionar $PATH.

Embora a construção e instalação de software é muitas vezes tão simples como executar ./configure, make, às vezes make checkou make test, em seguida, make installou sudo make install, às vezes você vai querer passar opções para o configurescript para configurar a compilação. Em particular, como diz o pfnuesel , é assim que você configura onde o software será instalado. Embora a make installetapa realmente instale o software, os locais onde tudo será instalado são normalmente estabelecidos na ./configureetapa.

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

Então, ./configuregeralmente é equivalente a ./configure --prefix=/usr/local. Para instalar o software em seu diretório pessoal, você pode usar ./configure --prefix=/home/galahad(se /home/galahadfor seu diretório pessoal) ou --prefix="$HOME". Então é claro que você ainda deve criar e instalar o software make. Devo dizer que nem todos os softwares distribuídos em código-fonte são criados dessa maneira. Você deve sempre procurar documentação dentro do arquivo de código-fonte extraído.

O que --prefixsignifica

Ao executar , você indica que o software deve ser instalado no diretório Mas isso raramente, se é que alguma vez, coloca arquivos soltos . Em vez disso, coloca arquivos que servem a propósitos diferentes nos diferentes subdiretórios de . Se esses subdiretórios não existirem, eles serão criados../configure --prefix=directorydirectorydirectorydirectory

Os executáveis ​​geralmente entram directory/bin, mas podem entrar directory/sbinse forem comumente usados ​​para administração do sistema ou podem (mais raramente, hoje em dia) entrar directory/gamesse são jogos. As bibliotecas entram directory/libou em outro diretório com o mesmo nome, como directory/lib32. Arquivos de cabeçalho entram directory/include. As páginas do manual entram directory/man. Os arquivos de dados usados ​​pelo software entram directory/share.

É isso que significa directoryser um prefixo . É o diretório pai que contém os locais em que arquivos diferentes serão instalados. Portanto, ele aparece como um prefixo nos caminhos absolutos da maioria dos arquivos e diretórios criados executando make install ou sudo make install.

Existem algumas exceções a isso. Os arquivos de configuração em todo o sistema - que às vezes são criados durante a instalação do software que os usará, embora nem sempre - geralmente entram /etc. Isso normalmente não é afetado pela especificação de um prefixo diferente. Mesmo se você instalar muitos softwares /usr/local, ele ainda será usado em grande parte /etce seu /usr/local/etcdiretório provavelmente não existirá, estará vazio ou conterá muito poucos arquivos.

Em muitos sistemas, você pode encontrar mais informações sobre o layout típico do sistema de arquivos executando man hier. Se você estiver usando um sistema GNU / Linux, poderá estar interessado no Padrão de Hierarquia do Sistema de Arquivos .

Eliah Kagan
fonte
2

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

Como em um caso simples, ele pode dizer a localização 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 tornar uma compilação adequada ao seu sistema. É o que eu penso. Corrija-me se for outra coisa.

A --prefix=PREFIXopção instala arquivos independentes da arquitetura no PREFIX. Quando você executa um make installcomando, as bibliotecas são colocadas no PREFIX/libdiretório, os executáveis ​​no PREFIX/bindiretório e assim por diante.

Se esse argumento não é passado para o configurecomando, em seguida, o valor padrão é /usr/local.

luv.preet
fonte