Compilação na fonte versus compilação fora da fonte


9

No meu desenvolvimento (principalmente em C ++), adotei há muito tempo o uso de compilações fora da fonte. Ou seja, a minha fonte geralmente se senta em um /project/srcdiretório e as compilações ao vivo em um /project/build/bin/release, /project/build/bin/debugdiretórios. Fiz isso porque mantém meus diretórios de origem limpos de arquivos intermediários, tenho um local para todos os meus binários, empacotamento é mais fácil, limpeza é mais fácil e controle de versão é mais fácil. (Eu perdi alguma coisa?)

Agora estou herdando um projeto (grande) que usa compilações na fonte. Qual é a motivação para esse tipo de estrutura e quais são suas vantagens? (Estou mais preocupado com razões no nível de engenharia vs. tipos de razões de preferência pessoal.)

Eu esperava que o "Design de software C ++ em larga escala" da Lakos tivesse peso, mas eu perdi se isso acontecesse.


2
Desculpas. Estou procurando por "Nas criações na fonte, melhore 'x'" ou "elas ajudam a garantir 'y'" ou "testes automatizados podem 'z'". Não é um discurso retórico. Não estou especificamente querendo entrar em uma guerra de opiniões aqui!
DIB

10
Compilações na fonte são uma maldição que você deve à preguiça do seu antecessor. Eles são péssimos para quase tudo (controle de origem, construção cruzada, busca de texto etc.), mas são incrivelmente fáceis de criar usando makefiles simples. Desculpe, isso foi um discurso retórico. Mas um objetivo .

11
O que exatamente você quer dizer com compilações "na fonte"? Algo como /project/src/bin/release, ou realmente todos os arquivos intermediários e de saída /project/src? O último pode ser realmente uma bagunça, se houver mais de uma dúzia de arquivos de origem, o primeiro está ok.
Doc Brown

2
@Tibo, não é apenas incrivelmente fácil com makefiles, mas também parece ser o padrão para a maioria dos IDEs (pelo menos quando verifiquei pela última vez há alguns anos).
Bart van Ingen Schenau 6/02

4
@BartvanIngenSchenau Realmente? que IDE você tem usado onde é esse o caso? Qt não faz isso, na verdade, parece colocar a compilação o mais longe possível da fonte, o Eclipse não faz isso. Você pode argumentar que Clion meio que faz isso, mas apenas como consequência de main.cpp estando inicialmente no nível superior do seu projeto, ele ainda cria um diretório cmake build separado da sua origem nesse nível superior. Acredito que o MSVS também seja semelhante ao Clion nesse sentido.
06618

Respostas:


8

Depois de perguntar à comunidade aqui e de continuar minha pesquisa on-line, não consegui encontrar justificativa de engenharia significativa para o uso de compilações na fonte. (Existem muitos exemplos de razões para evitá-los.)

A única razão objetiva que encontrei (como mencionado no comentário de @BartvanIngenSchenau) é que às vezes as compilações na fonte são padronizadas por um sistema de compilação. Devido a esse padrão, eles não exigem sobrecarga no tempo de configuração, o que pode ser perfeitamente aceitável para um projeto muito pequeno (ou zero).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.