Post

Configurando o Ambiente Windows para C++

Necessita de revisão!

Criando pontos virtuais do disco

É possível definir um caminho virtual de acesso rápido para qualquer parte da unidade física. Para isso vamos usar o comando subst.

Para ver as opções disponíveis podemos usar o comando:

1
subst /?

Sempre que usamos o sinal /? no cmd, podemos ver as opções - semelhante ao help em sistemas unix.

Pois bem, vamos definir uma unidade virtual do nosso projeto de trabalho.

1
subst w: e:\Tiago\cpp\<meu_projeto>

Agora vamos adicionar esse comando no startup.bat para que quando o Windows iniciar ele montar a unidade virtual automaticamente.

Aperte Windows + R e digite: shell:startup

Dentro desta pasta crie um arquivo chamado startup.bat e adicione as linhas:

1
2
@echo off
subst w: e:\Tiago\cpp\<meu_projeto>

Os parâmetros são: unidade virtual e caminho da unidade física.

Para excluir podemos usar o comando subst w: /D.

Geralmente uso arquivos do dotfiles onde se encontra meus scripts.

Vamos criar links simbólicos para a pasta bin

  • Criar um symbolic link em /bin para o dotfiles
    1
    
    mklink /D "c:\bin" "c:\Users\tiago\dotfiles\bin"
    
  • Criar um symbolic link da pasta emacs.d
    1
    
      mklink /D c:\.emacs.d c:\Users\tiago\dotfiles\dots\emacs.d
    

NOTE: Não sei se ainda funciona. Precisa verificar

Variável de ambiente

Configure nas variáveis de ambiente o caminho onde o Windows irá tratar o seu diretório como HOME.

  • set variable environment HOME => c:\Users\tiago

Editor de Texto

Use o Emacs!

Criando primeiro arquivo C++

Crie o primeiro arquivo c++ em w:\src\main.cpp

1
2
3
4
5
6
7
8
#include <windows.h>

int CALLBACK
WinMain(HINSTANCE instance, HINSTANCE prev_instance, LPSTR cmd_line, int cmd_show) 
{
    MessageBoxA(0, "Hello World", "Hello", MB_OK | MB_ICONINFORMATION);
    return 0;
}

De fato, o ponto de entrada do Windows não é necessariamente aqui. A entrada verdadeira acontece no CRT Library (C Runtime Library).

Outro detalhe são as funções. A maioria delas são macros com apontamentos para A e W. Exemplo:

  • MessageBox -> MessageBoxA
  • MessageBox -> MessageBoxW

Provavelmente por questões de compatibilidade a Microsoft decidiu deixar as macros, mas você pode colocar as funções diretas com A ou W dependendo de como você deseja (unicode ou ansi).

A letra A significa (ANSI) e W (Unicode - utf8).

Por padrão o compilador cl irá usar o Unicode

Criando arquivo de build

Para compilar é necessário apenas um arquivo .bat.

Dentro do projeto raiz, defina um build.bat com as definições da compilação.

1
2
3
4
5
6
7
8
9
10
@echo off

mkdir ..\build
pushd ..\build
cl -FC -Zi ..\src\main.cpp user32.lib Gdi32.lib

REM -FC caminho completo do arquivo quando ocorrer um erro
REM -Zi compilar com flags para debug

popd
  • echo off: Desativa a saída (print) das instruções que estão no batchfile, ou seja, não imprimi a linha. Agora o @ serve para não imprimir nem o primeiro echo.
  • pushd/popd: Navega para um diretório novo e persiste e diretório atual para retornar depois a ele com o popd
  • cl: Compilando usando o compilador MSVC (Microsoft Visual C)

Habilitando script do compilador cl

Para que possamos compilar nosso programa vamos precisar do cl ativado e também de outros programas como o próprio emacs para poder inicializar pelo terminal.

Há 2 opções.

Opção 1: Usar o dotfiles que já possui o script shell.bat e adicionar a pasta bin de onde ele está para o path. Dessa forma, podemos iniciar o shell.bat com o cmd ou o cmder por exemplo.

Opção 2: Criar um novo e adicioná-lo ao projeto (como um script customizado) e pedir para o terminal carregar o script ao abrir.

Para criar um shell.bat, você pode adicionar ele em <project_root>/misc/shell.bat. Seu conteúdo é algo como:

1
2
3
4
@echo off
call "c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

set path=w:\misc;%path%

Aqui dizemos ao terminal que ao rodar o shell.bat, inicie também o compilador MSVC com o script vcvarsall.bat x64 e adicionamos ao path a pasta misc.

Dentro de misc é onde podemos adicionar “diversos” arquivos como scripts do projeto que ficarão no path.

Como iniciar o script shell.bat automaticamente

Para que o terminal já inicie o script shell ao abrir, você pode dizer à ele pelas propriedades com o

/k <caminho/shell.bat>

1
%windir%\system32\cmd.exe /k w:\misc\shell.bat

Iniciando emacs pelo terminal

Agora que temos o misc no path após o script shell.bat ser executado, podemos adicionar mais um batch file para abrir o emacs.

Crie um arquivo em \misc\emacs.bat

1
2
@echo off
call "C:\Program Files\Emacs\x86_64\bin\runemacs.exe"

Você também pode usar o emacs.bat existente no dotfiles

Iniciando Visual Studio pelo terminal

Usaremos o Visual Studio como debugger.

É possível iniciar com:

1
devenv

Iniciando o projeto para debug

Compile o projeto

1
2
cd w:\src
build.bat

Abra o Visual Studio a partir do .exe gerado com propriedades de debugger

1
devenv \build\<meu_projeto>.exe

Isso irá gerar uma Solution fake e que devemos dizer ao VS onde fica o work directory.

O work directory será onde o VS irá ser executado, ou seja, qual caminho ele irá olhar a princípio na execução. Isso é útil para carrgar arquivos etc.

Dito isto, vamos criar uma pasta /data para o VS iniciar a partir dela.

Com a pasta criada, de volta no VS, abra propriedades da Solution e mude o caminho do work directory.

Apertando F11, iniciaremos como Debugger parando na primeira linha do programa.

Resumo

Resumindo o fluxo é:

  1. Windows inicia startup.bat com as definições do subst para gerar uma unidade virtual.
  2. Cmd/Cmder possui o script shell.bat que irá iniciar o script do compilador MSVC + adicionar a pasta misc (ou qualquer outra) ao path.
  3. Pelo terminal podemos iniciar qualquer coisa que esteja no path como o script emacs.bat e o compilador já estará disponível.

Referências

Esta postagem está licenciada sob CC BY 4.0 pelo autor.