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
.
Links Simbólicos
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 dotfiles1
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 popdcl
: 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 é:
- Windows inicia
startup.bat
com as definições do subst para gerar uma unidade virtual. - Cmd/Cmder possui o script
shell.bat
que irá iniciar o script do compilador MSVC + adicionar a pasta misc (ou qualquer outra) ao path. - Pelo terminal podemos iniciar qualquer coisa que esteja no path como o script
emacs.bat
e o compilador já estará disponível.