Embora o make(1)
e muitos sistemas de compilação, como o autotools, suportem compilação incremental, o Gentoo com o Portage padrão não aproveita isso. Depois que um pacote é compilado e instalado, o diretório de trabalho é descartado.
A dificuldade real de usar compilação incremental seria fazer com que os pacotes fossem construídos de maneira confiável dessa maneira. É muito mais fácil ter certeza de que uma compilação será bem-sucedida, correta e reproduzível se você sempre fizer uma compilação limpa. Muitos sistemas de compilação quebrariam sutilmente se o Gentoo tentasse dar suporte à reconstrução incrementalmente. E, em muitos casos, seria necessário executar novamente ./configure
(ou seu equivalente), o que provavelmente criaria um novo config.h
ou atualizar variáveis de ambiente, como CFLAGS
e CPPFLAGS
no Makefile
s gerado (ou equivalentes se outros sistemas de compilação forem usados). Tocar config.h
exigiria que a maioria das fontes fosse recriada. E se PACKAGE_VERSION
for alterado, o que pode ser passado por Makefile
via CPPFLAGS
se o pacote não usar config.h
, todas as fontes devem ser reconstruídas para ver os novos valores - a menos que você pode de alguma forma descobrir que certos arquivos de origem não precisariam ser recompilados porque eles não fazem referência a uma macro de pré-processador em particular.
Então, no final, mesmo que o Gentoo dedicasse todo o trabalho para tentar dar suporte à compilação incremental entre as atualizações da versão do pacote, muitos pacotes precisariam ser totalmente recompilados ou make(1)
seria acabará recompilando-os totalmente de qualquer maneira (por exemplo, se o timestamp de config.h
for alterado). Então, isso seria um esforço de alto custo para um ganho muito marginal - e até mesmo provavelmente introduziria um lote de bugs sutis , no meu melhor entendimento. Assim, não espero que tal recurso seja introduzido.
A minha resposta refere-se principalmente a pacotes autotools / simples Makefile
-tipo, mas nem tudo é compilado desta forma, pelo que os motivos exatos provavelmente seriam diferentes dependendo do pacote exato em questão.