Pergunta

Para a maioria do meu trabalho de desenvolvimento com o Visual C ++, eu estou usando constrói parcial, por exemplo, pressione F7 e alterado somente arquivos C ++ e suas dependências são reconstruídas, seguido por uma ligação incremental. Antes de passar uma versão para testar, eu tomar a precaução de fazer uma reconstrução completa, o que leva cerca de 45 minutos no meu projeto atual. Tenho visto muitos posts e artigos defendendo esta ação, mas maravilha é necessário, e em caso afirmativo, por quê? Será que afetam o EXE entregue ou o PDB associado (que também usamos para testar)? Será que a função de software diferente a partir de uma perspectiva de teste?

Para compilações, estou usando VS2005, compilação incremental e ligando, cabeçalhos pré-compilados.

Foi útil?

Solução

não todos se deparar com esse padrão de uso? Eu recebo erros de compilação estranhos, e antes mesmo de investigar Eu reconstruir uma cheia, e o problema desaparece.

Isto por si só parece-me ser uma boa razão suficiente para fazer uma reconstrução completa antes de autorização.

Se você estaria disposto a virar uma compilação incremental que concluída sem problemas ao longo do teste, é uma questão de gosto, eu acho.

Outras dicas

O sistema de compilação parcial funciona verificando datas de arquivos de origem contra os resultados da construção de arquivo. Assim, ele pode quebrar se você, por exemplo, restaurar um arquivo anterior do controle de origem. O arquivo mais cedo teria uma data de modificação mais cedo do que o produto de construção, de modo que o produto não seria reconstruído. Para se proteger contra esses erros, você deve fazer uma compilação completa se é uma compilação final. Enquanto você está desenvolvendo, porém, compilações incrementais são, naturalmente, muito mais eficiente.

Edit:. E, claro, fazer uma reconstrução completa também protege você de possíveis erros no sistema de compilação incremental

O problema básico é que a compilação é dependente do ambiente (sinalizadores de linha de comando, bibliotecas disponíveis, e provavelmente alguns Black Magic), e assim por duas compilações só terá o mesmo resultado se forem realizados nas mesmas condições. Para testes e implantação, você quer ter certeza de que os ambientes são tão controlada quanto possível e você não está recebendo comportamentos malucos devido ao código estranho. Um bom exemplo é se você atualizar uma biblioteca de sistema, em seguida, recompilar metade dos arquivos - metade ainda está tentando usar o código antigo, metade não. Em um mundo perfeito, este seria ou erro fora imediatamente ou não causar quaisquer problemas, mas, infelizmente, às vezes nenhum desses acontecer. Como resultado, fazendo uma recompilação completa evita uma série de problemas associados com um processo de construção escalonada.

Eu definitivamente recomendo. Eu vi em um número de ocasiões com uma grande solução Visual C ++ o verificador de dependência não conseguem pegar alguns dependência de código alterado. Quando esta mudança é um arquivo de cabeçalho que os efeitos do tamanho de um objeto coisas muito estranhas podem começar a acontecer. Estou certo que o verificador de dependência tem melhor no VS 2008, mas eu ainda não confiar nele para uma compilação de lançamento.

A maior razão de não enviar um binário de forma incremental ligado é que algumas otimizações estão desativadas. O vinculador irá deixar preenchimento entre funções (para torná-lo mais fácil para substituí-los na próxima ligação periódica). Isso adiciona algum inchaço ao binário. Pode haver saltos extras, bem como, o que muda o padrão de acesso de memória e pode causar paginação extra e / ou erros de cache. Versões mais antigas do funções podem continuar a residir no mesmo executável embora nunca são chamados. Isso também leva ao inchaço do binário e um desempenho mais lento. E você certamente não pode usar a geração de código link-tempo com vinculação incremental, para que você perca mais otimizações.

Se você está dando uma compilação de depuração para um testador, então provavelmente não é um grande negócio. Mas seus candidatos libertação deve ser construído a partir do zero no modo de versão, de preferência em uma máquina de compilação dedicado com um ambiente controlado.

Visual Studio tem alguns problemas com parcial (incremental) constrói, (eu principalmente encontrou erros ligando) De vez em quando, é muito útil ter uma reconstrução completa.

Em caso de tempo de compilação longos, há duas soluções:

  1. Use uma ferramenta de compilação paralela e tirar proveito de sua (assumido) hardware multi-core.
  2. Use uma máquina de compilação. O que eu uso mais é uma máquina de compilação separada, com um CruiseControl configurar, que realiza reconstrói completos de tempos em tempos. O lançamento "oficial" que eu fornecer à equipe de testes e, por fim, para o cliente, é sempre tomada a partir da máquina de compilação, não do ambiente do desenvolvedor.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top