O que o 'make install' faz?

52

Passando do Windows para o Linux, não consigo entender o processo de instalação do 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 significa exatamente?

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

KawaiKx
fonte
1
Minha resposta para stackoverflow.com/questions/528399/… fornece uma breve visão geral dos tipos usuais de tarefas realizadas por make installetapas do ponto de vista dos programadores.
precisa

Respostas:

44

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". Essa 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 eles possam ser acessados. Ao contrário do Windows, a instalação requer apenas a cópia de algumas bibliotecas e executáveis ​​e não há nenhum requisito de registro como tal. Em resumo, "make install" apenas copia os arquivos compilados nos locais apropriados.

sharjeel
fonte
4
Tecnicamente, o registro não é um requisito - o que todos os instaladores acrescentam é apenas uma função de conveniência, semelhante ao banco de dados do gerenciador de pacotes no Linux, para pessoas que gostam de poder desinstalar software.
grawity
2
@rawrawity Na verdade, no Windows, é necessário editar o registro por vários motivos, como a integração. No Linux, integrar softwares uns aos outros geralmente envolve apenas copiar arquivos ou adicionar linhas aos arquivos de configuração por algo como um script pós-instalação.
Camilo Martin
@sharjeel Seria útil dizer como posso encontrar a regra nomeada allno Makefilee como é o marcador final dessa seção, para que eu possa ver onde o processamento das regras para all.
Pro Backup
36

make installfaz o que o Makefileautor deseja. Normalmente, a essa altura, é tarde demais para alterar o diretório de instalação, como costuma ser conhecido anteriormente , durante a construção, para que os arquivos de ajuda e os arquivos de configuração possam ser referenciados com os nomes de caminho corretos.

Muitos projetos usam as ferramentas automáticas GNU para tentar melhorar sua portabilidade entre as diferenças de hardware e sistema operacional. (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 daqueles declarados em locais diferentes.)

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

./configure
make
make install

O ./configuretipicamente permite que você use uma opção de linha de comando como --prefix /opt/apacheou algo semelhante para especificar um caminho diferente. /usr/local/é um padrão comum prefix. É muito mais fácil o software construído localmente residir em um local e o software fornecido pela distribuição residir nos "diretórios principais": /usr/ /bin/e assim por diante. (Os empacotadores têm muito cuidado para nunca tocar nos arquivos /usr/local/- eles sabem que é exclusivo para administradores de sistema.)

De qualquer forma, o ./configure --prefix /path/to/new/prefixirá definir uma variável no Makefileque está disponível ao compilar o programa, modificando as páginas de manual para que eles apontam para os locais corretos para arquivos, modificar arquivos de configuração, etc. Então, makevai construir o software especificamente para o local que deseja instalar e make installirá instalá-lo nesse local.

A maioria dos programas pode ser executada mesmo sem a make installetapa final - apenas ./program_nameos inicia com frequência. Definitivamente, isso é uma coisa por projeto - alguns, como postfix, qmailetc., são feitos de muitas peças móveis diferentes e dependem de todos eles trabalhando juntos. Outros, como lsou supodem ser independentes o suficiente para executar bem a partir do diretório em que foram criados. (Isso geralmente não é útil - mas às vezes é muito útil).

No entanto, nem todos os projetos usam o Autotools - eles são enormes , complicados e miseráveis ​​de manter. MakefileS manuscritos são muito mais simples de escrever, e eu pessoalmente acho que apenas distribuir um simples Makefilecom variáveis ​​de configuração disponíveis é muito mais fácil para desenvolvedores e usuários. (Embora o ./configure ; make ; make installmantra seja realmente fácil para os usuários quando funciona.)

sarnold
fonte
19

make installfaz nada menos do que executar a installfunção / seção em seuMakefile

Sascha
fonte
Certo, ele simplesmente gosta make clean, basicamente, apenas executa os códigos na seção.
Wulfric Lee
8

O mais importante a ser mencionado sobre a instalação de software no Linux é que é muito mais confiável e fácil instalar o software da sua distribuição (esse é o seu objetivo!). Use apenas make installse não houver outra maneira (considere também programas alternativos).

O erro comum dos usuários do Windows é baixar programas de diferentes locais e tentar instalá-los, esquecendo 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 um dos principais motivos para a ausência de infecções por vírus no Linux é que o software é (ou deveria ser) instalado a partir de um local central (confiável) em vez de muitos sites aleatórios.

Como nota adicional, enquanto distribuições como o Ubuntu sempre contêm 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 Linux, como o Debian / Ubuntu).

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

corvinus
fonte