O que 'make install' faz?

40

Movendo do Windows para o Linux, não consigo entender o processo de instalação de software no Linux. No Windows, quando executamos um arquivo de instalação, ele pergunta onde você deseja instalar o programa, provavelmente apenas na pasta de arquivos do programa. Mais tarde, edita o registro. Isso é chamado de instalação no Windows. O que significa "instalar software" no Linux exatamente?

Suponha que eu tenha baixado o código-fonte, configure-o e, em seguida, crie o binário usando make . Agora é apenas um programa binário, não utilizável ainda. Como vai ficar 'instalado'? Por make install ? E o que esse comando faz exatamente?

    
por KawaiKx 21.11.2011 / 09:16

4 respostas

36

Make é um programa de fluxo de trabalho de uso geral, geralmente usado para compilação. Mas pode ser usado para qualquer coisa.

Quando você faz algo como "make all", o programa make executa uma regra chamada "all" de um arquivo no diretório atual chamado "Makefile". Esta regra geralmente chama o compilador para compilar algum código-fonte em binários.

Quando você faz "make install", o programa make pega os binários da etapa anterior e os copia em alguns locais apropriados para que possam ser acessados. Ao contrário do Windows, a instalação requer apenas copiar algumas bibliotecas e executáveis e não há requisitos de registro como tal. Em suma, "make install" apenas copia arquivos compilados em locais apropriados.

    
por 21.11.2011 / 09:23
33

make install faz o que o autor Makefile quer que ele faça. Normalmente, a essa altura, é muito tarde para alterar o diretório de instalação, como é frequentemente conhecido anterior , durante a compilação, para que arquivos de ajuda e arquivos de configuração possam ser referenciados com nomes de caminho corretos.

Muitos projetos usam o GNU Autotools para tentar melhorar sua portabilidade entre as diferenças de hardware e sistemas operacionais. (Diferentes variantes do Unix usam cabeçalhos ligeiramente diferentes para declarações de funções que estão um pouco fora do caminho usual - exceto que a maioria dos programas precisa de um ou outro dos declarados em locais diferentes.)

Quando um projeto usa o Autotools, o mantra normal para instalá-lo é:

./configure
make
make install

O ./configure normalmente permite que você use uma opção de linha de comando como --prefix /opt/apache ou algo semelhante para especificar um nome de caminho diferente. /usr/local/ é um padrão comum prefix . É muito mais fácil para o software construído localmente residir em um único local e o software fornecido pela distribuição para residir nos "diretórios principais": /usr/ /bin/ e assim por diante. (Empacotadores são muito cuidadosos em nunca tocar arquivos em /usr/local/ - eles sabem que é exclusivamente para administradores de sistema.)

De qualquer forma, o ./configure --prefix /path/to/new/prefix definirá uma variável no Makefile que está disponível ao compilar o programa, modificando as páginas de manual para que elas apontem para os locais corretos dos arquivos, modificando os arquivos de configuração etc. Então, make criará o software especificamente para o local de instalação desejado e make install o instalará nesse local.

A maioria dos programas pode ser executada mesmo sem a etapa make install final - apenas ./program_name geralmente os inicia. Esta é definitivamente uma coisa por projeto - algumas, como postfix , qmail , etc., são compostas de muitas peças diferentes e dependem de que todas trabalhem juntas. Outros, como ls ou su , podem ser independentes o suficiente para executar bem a partir do diretório em que foram construídos. (Isso nem sempre é útil - mas às vezes muito útil.)

No entanto, nem todos os projetos usam os Autotools - eles são enormes , complicados e miseráveis para serem mantidos. Makefile s manuscritas são muito mais simples de escrever, e eu pessoalmente acho que apenas distribuir uma variável Makefile simples com variáveis de configuração disponíveis é muito mais fácil para desenvolvedores e usuários. (Embora o ./configure ; make ; make install mantra seja realmente fácil para os usuários quando ele funciona.)

    
por 21.11.2011 / 09:28
15

make install não faz nada menos do que executar a install function / section no seu Makefile

    
por 21.11.2011 / 09:21
8

A coisa mais importante a mencionar sobre a instalação de software no Linux é que é muito mais confiável e fácil de instalar software a partir de sua distribuição (este é o seu propósito!). Use somente make install se não houver outra maneira (considere programas alternativos também).

Um erro comum dos usuários do Windows é baixar programas de diferentes locais e tentar instalá-los, esquecendo-se de verificar seus pacotes de distribuição, que podem ser instalados com um único clique ou comando (no gerenciador de pacotes).

Lembre-se também de que uma das principais razões para a ausência de infecções por vírus no Linux é que o software é (ou deve ser) instalado a partir de um local central (confiável) em vez de muitos sites aleatórios.

Como nota adicional, embora distribuições como o Ubuntu sempre contenham pacotes desatualizados, também existem distribuições como o Arch Linux que estão sempre atualizadas (embora não ofereçam literalmente todos os programas já lançados para o Linux, como o Debian / Ubuntu).

Quanto ao que exatamente acontece quando você usa o gerenciador de pacotes, ele verifica as dependências, baixa os pacotes, descompacta, coloca todos os arquivos em seus diretórios apropriados, de acordo com as diretrizes da própria FHS e da distribuição, e algumas outras rotinas que você provavelmente descubra a partir da página man do gerenciador de pacotes.

    
por 27.11.2011 / 21:02