Otimizando tempo de compilação no Visual Studio

Posted by icaro56 |29 Jul 16 | 0 comments

Otimizando tempo de compilação no Visual Studio

Ativando tempo de compilação

Antes de ensinar como configurar um projeto C++ no Visual Studio para compilar de uma forma mais rápida, vou ensinar a como configura-lo para mostrar o tempo de compilação.

Observação: usado Visual Studio 2012.

  • Abra o Visual Studio;
  • Entre no menu TOOLS->Options;

project

  • Expanda a árvore Project and Solutions e selecione Build and Run:
  • Altere no combo box “MSBuild project build output verbosity” de “Minimal” para “Normal“;
  • Clique em Ok e compile o projeto. Agora mostrará o tempo de compilação na janela de Output.

Anote o tempo de compilação para futura comparação.

Usando todos os núcleos

Hoje em dia os processadores possuem vários núcleos e podemos tirar proveito disso na hora de compilar um projeto no Visual Studio. Para ativar a compilação por vários núcleos, siga os passos seguintes:
  • Entre nas propriedades do projeto clicando botão direito no projeto->Properties;
  • Expanda Configuration Properties->C/C++>General;

project2

  • Selecione o campo Multi-processor Compilation e configure-o com a opção Yes(/MP) e clique em OK:
Compare o tempo de compilação com a versão anterior.

Usando Precompiled Header

Precompiled Headers são arquivos de cabeçalhos que são pré-compilados, ou seja, são todos os “includes” de bibliotecas que nosso projeto depende para funcionar corretamente e que não serão mudados com frequência.
Ativando Precompiled Headers, a primeira compilação demorará mais porque estará gerando um arquivo PCH, mas após criado esse arquivo, podemos dar rebuild para recompilar todo projeto e não será mais criado o arquivo PCH.
Siga os passos seguintes:
  • Crie um arquivo de cabeçalho chamado de “stdafx.h” (Pode ser qualquer nome);
  • Crie um arquivo CPP chamado “stdafx.cpp” (Pode ser qualquer nome);
  • Agora faça o arquivo CPP incluir o cabeçalho:#include “stdafx.h”
  • Agora precisamos preencher o arquivo “stdafx.h” com todos os includes que provavelmente não serão alterados na aplicação. No meu caso que estou usando Ogre e QT, coloco os seguintes includes:#include “Ogre.h”
    #include “QtCore.h”
    #include “QtGui.h”
    #include “QtWidgets.h”
    #include <iostream>
    #include “windows.h”
  • Os arquivos estão criados e preenchidos, agora é necessário configurar o projeto. Vá em Propriedades do projeto. Botão direito em cima do projeto->Properties;
  • Expanda Configuration Properties->C/C++>Precompiled Headers;
  • No campo Precompiled Header escolha Use (/Yu);

project3

  • No campo Precompiled Header File informe o nome do arquivo: stdafx.h
  • Agora é necessário informar ao projeto para que ele inclua o arquivo stdafx.h na hora de compilar no início de cada arquivo de nosso projeto. Para isso, expanda Configuration Properties->C/C++>Advanced

project4

  • No campo Forced Include File informe o nome: stdafx.h e clique em OK;
  • Agora é o segredo: se compilássemos agora haveria vários erros. Então precisamos configurar para que apenas um arquivo .CPP crie o cabeçalho pré-compilado que o projeto todo estará usando;
  • Portanto, clique com o botão direito em cima de qualquer arquivo .CPP presente no projeto. Eu escolhi omain.cpp (de preferência escolha o arquivo principal). Vá em Properties desse arquivo;
  • Expanda Configuration Properties->C/C++>Precompiled Headers;
  • No campo Precompiled Header escolha a opção Create (/Yc);

project5

  • Clique em Ok;
  • Compile o projeto e dará um erro de /Zm algum número;
    Por exemplo:
    Error1error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of ‘-Zm229’ or greater
  • Agora copie o número que apareceu em seu Output e vá em Properties do Projeto;
  • Expanda Configuration Properties->C/C++>Command Line;

project6

  • E dentro da caixa de texto em Addicional Options coloque o seguinte comando:/Zm229
  • No meu caso foi /Zm229 mas no seu caso pode ser outro número, por isso apague 229 e use o número que foi copiado do Output. Esse número vai crescendo de acordo com a quantidade e complexidade dos arquivos de cabeçalho presentes no stdafx.h. Você pode colocar um número bem maior para não precisar ficar trocando quando extrapolar novamente.
Compile o projeto e compare com as compilações anteriores.
Meu projeto antes demorava 4 minutos e 38 segundos para compilar. Agora está levando 31 segundos!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*