Ponto V!

Home C/C++ Visual C++ Como Utilizar o Visual Studio C++ – Parte 2
Bruno Crivelari Sanches
Como Utilizar o Visual Studio C++ – Parte 2Imprimir
Escrito por Bruno Crivelari Sanches

No tutorial anterior vimos como instalar e como criar um programa de teste no visual, agora vamos nos aprofundar um pouco mais no sistema de build do visual.

Sobre o Visual C++ 2010

Este artigo foi escrito usando como base o Visual C++ 2008. Pouco muda no processo de build da versão 2010 e não vemos necessidade um artigo apenas sobre ele. Caso tenha problemas na instalação, deixe um comentário aqui que ajudaremos no que for possível

Internamente na versão 2010 a Microsoft refez todo sistema de build e agora ele é todo baseado no Microsoft Build. Mas para o usuário pouco mudou na interface do Visual, que na verdade ganhou novas funcionalidades e manteve as antigas. Caso tenha algum problema de build nessa versão, não deixe de postar nos comentários para que possamos ajudar.

Configurações de Build

O visual por padrão possui duas configurações de build, a debug e a release. Cada versão permite que o usuário configure o compilador de maneiras totalmente diferentes, além de ser possível criar quantas configurações forem necessárias.

Estas configurações são uteis para permitir, por exemplo, desabilitar qualquer otimização do compilador e facilitar a depuração de código (fato que já ocorre na configuração Debug gerada quando um projeto é criado), sendo assim, a versão debug é geralmente usada apenas pelos desenvolvedores.

Já a versão release liga as otimizações do compilador e (geralmente) desliga a geração de informações de debug, sendo esta usada para se realizar um build quando queremos enviar o software ao usuário final.

A configuração atual pode ser visualizada no topo da janela do visual, próximo as opções de menu:

Caixa de seleção de configurações.

Na figura acima vemos que a configuração ativa é a Debug, clicando na caixa de seleção é possível alterar a configuração a ser usada no próximo build.

Além das configurações de build, é possível especificar uma plataforma para cada configuração, como por exemplo Win32 e Win64, como nunca trabalhei com desenvolvimento multi-plataforma no visual (nos projetos multi-plataforma que trabalhei usávamos uma IDE para cada ambiente) não vou me aprofundar nesse item.

Opções do Menu Build

Na figura abaixo podemos ver as opções do menu build do visual, que são descritas a seguir:

Menu de build do visual

Vemos que o menu de build é divido em quatro seções, sendo estas:

  1. Solução (solution): comandos que afetam toda a solução.
  2. Projeto: os comandos aqui afetam apenas o projeto e suas dependências.
  3. Lote (Batch): comandos que afetam múltiplas configurações.
  4. Compilar: este compila apenas o arquivo sendo editado.

Note que os comandos de compilação são basicamente:

  • Build: este comando compila apenas os arquivos alterados e as dependências afetadas por estes.
  • Rebuild: este comando apaga todos os arquivos gerados, forçando uma rê-compilação completa.
  • Clean: apenas apaga os arquivos gerados.

Detalhe que os comandos relacionados ao projeto não afetam unicamente o projeto sendo editado, podem afetar as suas dependências, se existirem múltiplos projetos dentro de uma solução, os comandos da seção projeto vão afetar as dependências também, para aplicar o comando apenas ao projeto selecionado, escolha as opções do item “Project Only”. Veremos o uso de dependências em mais detalhes no próximo tutorial.

Opções de Runtime

O runtime (no caso do visual) é a forma como seu projeto é associado a biblioteca padrão do C ou C++ (a libc), que no caso do visual pode ser uma dll, as famosas MSVC???.lib, onde ??? varia de acordo com a versão e tipo de build, ou então, uma lib que é linkada diretamente com seu projeto.

Mas para que especificar uma biblioteca C/C++, não deveriam ser iguais? Sim, deveriam, mas a Microsoft disponibiliza dois tipos básicos, uma versão debug e outra versão release.

A versão debug da libc gera informações extras de depuração que veremos em detalhes no tutorial sobre como usar o depurador do visual, já a versão release não possui essas informações e é construída com todas as otimizações possíveis.

Além da versão debug e release, existem para cada uma delas a versão DLL e não DLL. A diferença entre elas é que na versão DLL, seu código é linkado com a MSVC???.dll, na versão não dll (estática), o seu código é linkado diretamente com o arquivo lib não precisando da dll para ser executado.

Para configurar o runtime sendo usado basta clicar com o botão direito do mouse sobre um projeto, e escolher “Properties”:

menu de um projeto

Na janela que abrir, basta expandir a “Configuration Properties”, depois o item “C/C++”, e clicar em “Code Generation”, do lado deve surgir então o item “Runtime Library”, como na figura abaixo:

Propriedades de um projeto

As opções são:

  • Multi-threaded (/MT): versão release multi thread, essa é a versão para linkagem estática.
  • Multi-threaded Debug (/MTd): mesma anterior, mas versão debug.
  • Multi-threaded DLL (/MD): versão release multi thread, mas para linkagem dinâmica.
  • Multi-threaded Debug DLL (/MDd): mesma da anterior, mas versão debug.
  • inherit from project defaults: este simplesmente usa a configuração de um projeto pai (nesse caso a solução) ou configuração padrão.

Detalhe que todas as libs são especificadas como multi-threaded, isso indica que elas podem ser usadas com código multi-thread (antigamente existia também a opção single thread).

Um detalhe que pode passar despercebido sobre a janela de propriedades é que existe uma versão para cada configuração, a configuração sendo utilizada fica no canto superior esquerdo da janela de configurações.

Escolhendo o Runtime

A escolha do runtime depende muito do tipo de projeto, e a decisão se baseia entre versão DLL ou não DLL, sendo debug e release escolhidos de acordo com o tipo de build.

A versão DLL é recomendada se seu projeto utiliza dlls, isso é necessário porque se o seu projeto usar a versão não dll da libc, cada dll e o exe do seu programa vão ter sua própria heap. Como cada módulo possui sua própria heap, a memória alocada em um módulo (dll ou exe), utilizando new ou malloc, tem quer ser liberada apenas no mesmo módulo, a estrutura do programa fica como no exemplo abaixo:

suposto programa usando libc com linkagem estatica

Já o mesmo programa utilizando a versão da libc para dlls, fica com a estrutura como na figura abaixo:

o mesmo programa usando libc com linkagem dinâmica (dll)

Sendo assim, se seu projeto utiliza dlls, é recomendável linkar ele apenas com a versão dll da libc.

Arquivos Gerados no Build

Na configuração padrão de projetos do visual, ele cria duas sub-pastas uma para os builds de debug, e outra para release:

Estrutura de diretórios de uma solução

Nestas duas pastas são colocados os arquivos gerados durante o build, no caso do build de release do meu programa de testes:

Arquivos gerados pelo build

Exceto por hello.exe, todos os outros arquivos são utilizados apenas pelo visual durante um build. Isso significa que para enviar esse programa para alguem basta enviar o arquivo exe gerado, que é suficiente para este programa funcionar.

Outro detalhe que como o conteúdo destas pastas é todo gerado pelo visual, removendo qualquer um ou todos os arquivos não causa problema algum, basta executar o build que o visual os gera novamente.

O visual permite modificar a pasta usada para armazenar os arquivos gerados e a maneira mais simples consiste em acessar as propriedades do projeto (clicando com o botão direito sobre o projeto no Solution Explorer, e clicando em “Properties”), na janela que abrir, selecione a opção General, que fica dentro de “Configuration Properties”, deve surgir então a opção “Output Directory”, que indica o diretório usado:

Propriedades do projeto, alterando diretórios de saída

O caminho padrão é um pouco estranho, pois consiste de: $(SolutionDir)$(ConfigurationName). Isso na verdade são duas variáveis de ambiente criadas pelo visual, sendo que $(SolutionDir) e $(ConfigurationName) contém respectivamente o diretório da solução e o diretório da configuração sendo usada. Pode-se por exemplo modificar para: $(SolutionDir)\bin, com esta alteração o arquivo exe vai ser ser gerados no diretório bin.

Alterando o valor da opção “Intermediate Directory” modifica o diretório de destino dos arquivos temporários (como arquivos obj).

No próximo tutorial, vamos ver como instalar a Windows SDK no visual.


Comentários (14)
  • silvio
    avatar

    como faço pra comparar no if visual c++ sao mais de 6 comparçoes tipo assim
    if(IMCText="Abaixo Do Peso";
    if(IMCText="Abaixo Do Peso";
    if(IMCText="Abaixo Do Peso";

  • Bruno Crivelari Sanches
    avatar

    Você precisa comparar strings? Recomendo dar uma olhada nesse outro artigo: Strings em C

    Esses são conceitos básicos da linguagem e podem ser aplicados em qualquer compilador / IDE, não apenas no visual.

    T+

  • Marcelino  - V-C/C++ WTF ^^ ?
    avatar

    Normalmente eu uso o COde::Blocks como IDE, mesmo sendo um iniciante, no CB eu tenho o Compilador GCC e Borland, além de API SDL, Alegro, Graphics e GTK. mas no Visual C++ qual compilador ele usa? eh um da propria Microsoft? LoL.

    Tentei usar essa função para ter o "gotoxy()" mas da erro :

    #include
    #include
    #include

    void gotoxy(int x, int y){
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x-1,y -1});
    }

    int main(void){
    gotoxy(38,12);
    printf("WFT!!!";);
    getch();
    }


    To tentando usar o MV pq parece que ele eh melhor para criar janelinhas bonitinhas e tals, os famosos programas "RAS" eu acho.

  • Vinícius Godoy de Mendonça
    avatar

    Olá. Alguns esclarecimentos.

    O primeiro, é que temos um tutorial sobre o Code::Blocks aqui no portal.

    Porém, como dissemos em outros comentários, o Visual configura-se como a IDE C++ mais importante na indústria de desenvolvimento de jogos. A maior parte dos jogos é construída para ambiente Windows. Também é uma IDE muito poderosa, e que pode ser adquirida gratuitamente no site da Microsoft.

    O Visual C++ é um compilador próprio da Microsoft. É mais uma opção além do gcc e do Borland. Não entendi muito pq do "LOL". A Microsoft é uma das principais empresas por trás do C++, participante inclusive do comitê que define os rumos da linguagem. Seu compilador é um dos mais importantes e poderosos da indústria, suportando completamente a STL, a TR1, e parte do C++x0.

    Também não sou nenhum grande fâ da empresa, mas não se pode fechar aos olhos para sua importância nesse quesito.

    Por fim, no lugar de "RAS" você deve estar querendo dizer "RAI", não? É a sigla de Rapid Application Development, e refere-se não à programas com janelinhas, mas a um processo de desenvolvimento acessorado pela IDE, de forma que você possa programar muito rapidamente. Esse conceito foi principalmente popularizado pela MS e pela Borland, na época do Delphi e do VB6.

  • Marcelino  - Ignore a Pergunta acima;
    avatar

    //Ignore a Pergunta acima;

    Aonde acho algum tutorial sobre esse SDK da Microsoft?

    Esse SDK eh uma Kit de API para Windows Feita pela Microsoft Certo?

  • Bruno Crivelari Sanches
    avatar

    Sim, o Windows SDK é a SDK para desenvolvimento windows. Sobre tutorial depende muito do que você quer fazer com ela, a Win SDK é gigante e tem funções para praticamente tudo no windows, desde criar uma simples janela a controlar o sistema de segurança do windows.

    De qualquer forma, eu não conheço muitos tutoriais de win32, sempre saio procurando pela web ou olhando a documentação oficial da microsoft do trabalho especifico que preciso realizar, você pode acessar a documentação a partir daqui: http://msdn.micro soft.com/en-us/default.aspx, se quer algo relacionado a jogos, então escolha desktop ou procure pelo DirectX.

    A referência da SDK: h ttp://msdn.microsoft.com/en-us/library/ee663300(VS.85).aspx

    T+

  • Marcelino
    avatar

    Obrigado pelas respostas, é sou ainda um iniciante em C, e pra mim muita coisa ainda é nova, em comparação com o Code::Blocks achei o Visual C++ meio esquisito xD, menos prático, mas não o explorei o suficiente e mal tenho conhecimento o suficiente para desfrutar o máximo de um IDE como tal.

    Mas pelo que vejo, os melhores IDE's são o CB,VB-C/C++ e Eclipse. pelo menos é o que vejo na Internet xD;

    E tenho um outro problema, como sou inciante, faço bastante exercícios para ter um boa lógica de programação, e quando aprendo um comando novo tento explora-lo ao máximo, e no tédio de exercícios de contas e + contas, criei aqui um joguinho em puro c++, aquele que tem uma bolinha e uma plataforma em baixo e não pode deixar a bola cair;

    O problema é que para mexer a plataforma eu só sei usar uma função de condição como "if" ou "switch" mas tenho que usa-la referenciada ao getch() para pegar as teclas, só que fazendo isso faz parar o loop que envolve o jogo;

    Tem alguma solução?

  • Vinícius Godoy de Mendonça
    avatar

    Para fazer jogos, é melhor usar uma API como a SDL. Ela irá mapear eventos para você. Um bom tutorial de SDL está aqui:
    http://www.lazyfoo.net/SDL_tutorials/

    Se quiser STL com OpenGL, pode seguir nossa coluna de OpenGL.

    O getch() não serve pra muita coisa nesse caso.

  • Bruno Crivelari Sanches
    avatar

    Na verdade o Code::Blocks é uma copia do Visual 6. Mas o Visual 7 mudou bastante a forma que organiza projetos, então é por isso que se estranha um pouco.

    O Eclipse é bem famoso, mas eu não gosto nem um pouco da forma que ele gerencia projetos, sempre tenho dor de cabeça quando preciso mudar um projeto de lugar na maquina ou manter varias versões de um mesmo projeto (situação comum aqui no meu trabalho).

    Sobre o getch, sugiro dar uma olhada na sugestão do Vinícius e uma olhada nos tutorias que ele sugeriu.

  • Vinícius Godoy de Mendonça
    avatar

    O Eclipse e o Netbeans são muito bons para Java, mas não para C++. Testo os dois em praticamente toda atualização grande, mas ainda os considero muito longe do Visual. Não que sejam ruins, mas as alternativas específicas para C++ ainda estão melhores.

    São uma boa alternativa se você estiver compilando em Linux. Mas creio que deva haver IDEs específicas melhores por lá também.

    Algumas pessoas dão preferência quando você tem ambiente híbrido. Ou seja, parte da equipe está no Linux e outra parte no Windows, usando o mesmo projeto. Aí nesse caso, pode ser interessante usar uma IDE idêntica nas duas plataformas.

  • Márcio Henrique Muzy Freitas  - falar desse processo
    avatar

    oi bom dia eu me chamo Márcio Henrique estou cursando o primeiro período de sistemas de informações e tava vendo com o meu professor da faculdade sobre esse sistema e achei bom,no começo me atrapalhei,mas depois que eu peguei o jeito até que gostei

    bom é isso

  • CARLOS CHRISTOFOLETTI  - DUVIDAS SOBRE IF P/ EXIBIR UMA CONSTANTE
    avatar

    COMO FAÇO PARA FAZER UM IF E EXIBIR UMA CONTANTE NA AFIRMATIVA E OUTRA CONSTANTE NA NEGATIVA?

  • Douglas  - LOL
    avatar

    B)
    De boa na lagoa, tranquilo como um esquilo... viajando como um elefante, rimando sem motivo!

Escrever um comentário
Your Contact Details:
Gravatar enabled
Comentário:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):S:!::?::idea::arrow:
Security
Por favor coloque o código anti-spam que você lê na imagem.
LAST_UPDATED2  

Busca

Linguagens

Twitter