diferença entre 'make clean' e 'make distclean'

21

Eu instalei o ffmpeg de fontes com ajuda desta página. link

Percebi que a maior parte deste tutorial chama make distclean após make install . Mas somente a libvpx chama make clean após a instalação.

De acordo com este documento, link make clean exclui todos os arquivos que make criou e make distclean deleta todos os arquivos que ./configure criou.

make clean

Erase from the build tree the files built by make all.

make distclean

Additionally erase anything ./configure created.

Entendo que make distclean é necessário para a próxima instalação, mas não consegui entender porque make clean é chamado após a instalação.

O ffmpeg instalado funciona sem problemas. Então eu fiz esta pergunta porque eu só quero melhorar meu conhecimento sobre o Linux. Seria muito útil que alguém me desse uma explicação para isso.

    
por ironsand 28.08.2013 / 20:31

3 respostas

24

O parâmetro usado após make depende apenas do (s) desenvolvedor (es) que escreveu o Makefile . A documentação que você faz referência posteriormente, o Autotools, é apenas uma das muitas maneiras de criar um Makefile .

O padrão típico é make clean remover todos os arquivos intermediários e make distclean torna a árvore exatamente como era quando foi desfazida (ou algo muito próximo), incluindo a remoção de qualquer saída do script de configuração. É assim que o kernel do Linux funciona, por exemplo.

Em outras palavras, é totalmente dependente dos desenvolvedores de cada uma dessas bibliotecas, e é por isso que às vezes seu clean e outras vezes é distclean . By the way, você não precisa executar clean / distclean - Eu acho que eles têm que executá-lo apenas para economizar espaço em disco. make install geralmente copia os arquivos para o diretório de destino (novamente dependente dos desenvolvedores) - normalmente, lugares como /usr/lib ou /usr/bin (também determinado pelo script de configuração, se for um sistema de criação Autotools)

Essas nuances são a principal razão pela qual as pessoas usam sistemas de gerenciamento de pacotes como pacotes RPM ou Debian.

    
por 28.08.2013 / 21:12
5

No meu entender, é simplesmente proteger o espaço em disco. Depois de compilar algum programa, você terá muitos arquivos, por exemplo, arquivos de objeto que não são mais necessários, porque eles estão ligados entre si nos binários. Tudo pode ser recriado gastando novamente algum tempo de CPU.

Veja este exemplo com o código ffmpeg atual:

  • após clonar o git repo, a origem leva 53 160 kB
  • após a execução do configure, é de 53 632 kB
  • após a compilação, temos mais de 10 vezes o valor inicial: 673 668 kB
  • make clean reduz isso para 53 636 kB
  • e finalmente depois de make distclean estamos quase no nível logo após a clonagem: 53 188 kB
por 28.08.2013 / 21:09
1

Por que a etapa libvpx usa make clean em vez de make distclean

No momento da gravação do guia, a libvpx não tinha nenhuma regra em Makefile para o destino distclean , portanto, clean foi usado.

Por que make (dist)clean é incluído após make install

make distclean / make clean é incluído após cada make install simplesmente como medida de precaução para fornecer uma "lista limpa" para os usuários que retornam, alteram as opções de configuração e compilam novamente (o que ocorreu com mais frequência do que o esperado ).

Em uma versão anterior do guia de compilação, sem o preventivo make distclean , um desses usuários ocasionalmente encontraria resultados inesperados.

E se make distclean / make clean der um erro?

Assim:

Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

ou isto:

make: *** No rule to make target 'distclean'.  Stop.

Ignore-o. Significa apenas que você correu make distclean duas vezes, o que é inofensivo.

    
por 11.10.2016 / 19:03

Tags