Passo a passo: compilar e depurar C++ com o WSL 2 e o Visual Studio 2022
O Visual Studio 2022 apresenta um conjunto de ferramentas C++ nativo para desenvolvimento do Subsistema do Windows para Linux versão 2 (WSL 2). Esse conjunto de ferramentas já está disponível no Visual Studio 2022 versão 17.0 ou superior.
O WSL 2 é a nova versão recomendada do WSL (Subsistema do Windows para Linux). Ele fornece melhor desempenho do sistema de arquivos Linux, suporte à GUI e compatibilidade completa com chamadas do sistema. O conjunto de ferramentas WSL 2 do Visual Studio permite que você use o Visual Studio para criar e depurar código C++ em distribuições do WSL 2 sem adicionar uma conexão SSH. Você já pode compilar e depurar código C++ em distribuições do WSL 1 usando o conjunto de ferramentas do WSL 1 nativo introduzido no Visual Studio 2019 versão 16.1.
O conjunto de ferramentas WSL 2 do Visual Studio dá suporte a projetos do Linux baseados em CMake e MSBuild. O CMake é nossa recomendação para todo o desenvolvimento multiplataforma do C++ com o Visual Studio. Recomendamos o CMake porque ele compila e depura o mesmo projeto em sistemas Windows, WSL e remotos.
Para uma apresentação em vídeo das informações neste tópico, confira Vídeo: depurar C++ com distribuições WSL 2 e Visual Studio 2022.
Tela de fundo do conjunto de ferramentas do WSL 2
O suporte multiplataforma do C++ no Visual Studio pressupõe que todos os arquivos de origem sejam originados no sistema de arquivos do Windows. Ao direcionar uma distribuição do WSL 2, o Visual Studio executa um comando local rsync
para copiar arquivos do sistema de arquivos do Windows para o sistema de arquivos WSL. A cópia de rsync
local não requer nenhuma intervenção do usuário. Ela ocorre automaticamente quando o Visual Studio detecta que você está usando uma distribuição WSL 2. Para saber mais sobre as diferenças entre o WSL 1 e o WSL 2, confira Comparar o WSL 1 com o WSL 2.
A integração de predefinições do CMake no Visual Studio dá suporte ao conjunto de ferramentas do WSL 2. Para saber mais, confira integração de Predefinições do CMake no Visual Studio e Visual Studio Code e Configurar e compilar com as Predefinições do CMake no Visual Studio. Também há informações mais avançadas neste artigo em Considerações sobre projetos avançados do WSL 2 e do CMake.
Instalar as ferramentas de build
Instale as ferramentas necessárias para compilar e depurar no WSL 2. Você instalará uma versão recente do CMake usando a implantação binária do CMake do Visual Studio em uma etapa posterior.
Instale o WSL e uma distribuição do WSL 2 seguindo as instruções em Instalar WSL.
Supondo que sua distribuição use
apt
(este passo a passo usa o Ubuntu), use os seguintes comandos para instalar as ferramentas de build necessárias na distribuição do WSL 2:sudo apt update sudo apt install g++ gdb make ninja-build rsync zip
Os comandos
apt
acima são instalados:- Um compilador C++
gdb
CMake
rsync
zip
- Um gerador de sistema de build subjacente
Desenvolvimento do CMake multiplataforma com uma distribuição do WSL 2
Este guia passo a passo usa GCC e Ninja no Ubuntu. E o Visual Studio 2022 versão 17.0 Versão Prévia 2 ou posterior.
O Visual Studio define um projeto do CMake como uma pasta com um arquivo CMakeLists.txt
na raiz do projeto. Neste passo a passo, você cria um novo projeto do CMake usando o modelo Projeto do CMake do Visual Studio:
Na tela Introdução do Visual Studio, selecione Criar um projeto.
As opções disponíveis são: Clonar um repositório, Abrir um projeto ou solução, Abrir uma pasta local, Criar um novo projeto ou Continuar sem código.":::
Na caixa de texto Pesquisar modelos, digite "cmake". Escolha o tipo Projeto do CMake e selecione Avançar. Dê ao projeto um nome e um local e selecione Criar.
Habilite a integração de predefinições do CMake do Visual Studio. Selecione Ferramentas>Opções>CMake>Geral. Selecione Preferir usar predefinições do CMake para configurar, compilar e testar e selecione OK. Em vez disso, você poderia ter adicionado um arquivo
CMakePresets.json
à raiz do projeto. Para mais informações, confira Habilitar integração de predefinições do CMake.No grupo de arquivos de configuração do CMake, "Usar as predefinições do CMake se disponíveis; caso contrário, usar CMakeSettings.json" está destacado e selecionado.
Para ativar a integração: no menu principal, selecione Arquivo>Fechar Pasta. A página Introdução é exibida. Em Abrir recentemente, selecione a pasta que você acabou de fechar para reabri-la.
Há três menus suspensos na barra de menus principal do Visual Studio. Use a lista suspensa à esquerda para selecionar seu sistema de destino ativo. Este é o sistema em que o CMake é invocado para configurar e compilar o projeto. Consultas do Visual Studio para instalações do WSL com
wsl -l -v
. Na imagem a seguir, WSL2: Ubuntu-20.04 é mostrado selecionado como o Sistema de Destino.Observação
Se o Visual Studio começar a configurar seu projeto automaticamente, leia a etapa 11 para gerenciar a implantação binária do CMake e continue na etapa abaixo. Para personalizar esse comportamento, confira Modificar notificações automáticas de configuração e cache.
Use a lista suspensa no meio para selecionar sua Predefinição de Configuração ativa. Configurar predefinições informa ao Visual Studio como invocar o CMake e gerar o sistema de build subjacente. Na etapa 7, a Predefinição de Configuração ativa é a predefinição padrão do Linux criada pelo Visual Studio. Para criar uma predefinição de configuração personalizada, selecione Gerenciar Configurações... Para mais informações sobre configurar predefinições, confira Selecionar uma predefinição de configuração e Editar predefinições.
Use a lista suspensa à direita para selecionar sua Predefinição de Build ativa. As predefinições de build informam ao Visual Studio como invocar o build. Na ilustração da etapa 7, a predefinição de build ativa é a Predefinição de Build Padrão criada pelo Visual Studio. Para obter mais informações sobre Predefinições de Build, confira Selecionar uma Predefinição de Build.
Configure o projeto no WSL 2. Se a geração do projeto não iniciar automaticamente, invoque manualmente o configure com Project>Configure project-name
Se você não tiver uma versão com suporte do CMake instalada na distribuição do WSL 2, o Visual Studio solicitará que você, abaixo da faixa de opções do menu principal, implante uma versão recente do CMake. Selecione Sim para implantar binários do CMake na distribuição do WSL 2.
O usuário é solicitado a instalar os binários C Make mais recentes de C Make. org porque a versão do C Make com suporte não está instalada."
Confirme se a etapa de configuração foi concluída e se você pode ver a mensagem Geração do CMake concluída na janela Saída no painel do CMake. Arquivos de build são gravados em um diretório no sistema de arquivos da distribuição do WSL 2.
Selecione o destino de depuração ativo. O menu suspenso de depuração lista todos os destinos do CMake disponíveis para o projeto.
Expanda a subpasta do projeto no Gerenciador de Soluções. No arquivo
CMakeProject.cpp
, defina um ponto de interrupção emmain()
. Você também pode navegar até a exibição de destinos do CMake selecionando o botão Seletor de Exibição no Gerenciador de Soluções, realçado na seguinte captura de tela:Selecione Depurar>Iniciar ou pressione F5. O projeto é compilado, o executável é iniciado na distribuição do WSL 2 e o Visual Studio interrompe a execução no ponto de interrupção. A saída do programa (neste caso,
"Hello CMake."
) está visível na janela do console do Linux:A janela do console do Visual Studio Linux exibe a saída do programa: "Olá, C Make". A janela do editor mostra o programa olá mundo. A execução parou em um ponto de interrupção na linha que diz retornar 0;."
Agora você criou e depurou um aplicativo C++ com o WSL 2 e o Visual Studio 2022.
Considerações sobre projetos avançados do WSL 2 e do CMake
O Visual Studio dá suporte nativo apenas para o WSL 2 para projetos do CMake que usam CMakePresets.json
como o arquivo de configuração ativo. Para migrar de CMakeSettings.json
para CMakePresets.json
, confira Habilitar a Integração de Predefinições do CMake no Visual Studio.
Se você estiver direcionando uma distribuição WSL 2 e não quiser usar o conjunto de ferramentas do WSL 2, no mapa do fornecedor de Configurações Remotas do Visual Studio em CMakePresets.json
, defina forceWSL1Toolset como true. Para mais informações, confira Mapa de fornecedores de Configurações Remotas do Visual Studio.
Se forceWSL1Tooslet for definido como true, o Visual Studio não manterá uma cópia dos arquivos de origem no sistema de arquivos WSL. Em vez disso, ele acessa arquivos de origem na unidade do Windows montada (/mnt/
...).
Na maioria dos casos, é melhor usar o conjunto de ferramentas WSL 2 com distribuições WSL 2 porque o WSL 2 é mais lento quando os arquivos de projeto são armazenados no sistema de arquivos do Windows. Para saber mais sobre o desempenho do sistema de arquivos no WSL 2, confira Comparar o WSL 1 com o WSL 2.
Especifique configurações avançadas, como o caminho para o diretório no WSL 2 em que o projeto é copiado, opções de origem de cópia e argumentos de comando rsync, no mapa do fornecedor de Configurações Remotas do Visual Studio em CMakePresets.json
. Para mais informações, confira Mapa de fornecedores de Configurações Remotas do Visual Studio.
Os cabeçalhos do sistema ainda são copiados automaticamente para o sistema de arquivos do Windows para proporcionar a experiência nativa do IntelliSense. Você pode personalizar os cabeçalhos incluídos ou excluídos dessa cópia no mapa do fornecedor de Configurações Remotas do Visual Studio em CMakePresets.json
.
Você pode alterar o modo IntelliSense ou especificar outras opções do IntelliSense no mapa do fornecedor de Configurações do Visual Studio em CMakePresets.json
. Para detalhes sobre o mapa do fornecedor, confira o mapa do fornecedor de Configurações Remotas do Visual Studio.
Projetos do Linux baseados em WSL 2 e MSBuild
O CMake é recomendado para todo o desenvolvimento multiplataforma do C++ com o Visual Studio, pois permite que você crie e depure o mesmo projeto no Windows, no WSL e em sistemas remotos.
Mas talvez você tenha um projeto do Linux baseado em MSBuild.
Se você tiver um projeto do Linux baseado em MSBuild, poderá atualizar para o conjunto de ferramentas do WSL 2 no Visual Studio. Clique com o botão direito do mouse no projeto no gerenciador de soluções e escolha Propriedades>Geral>Conjunto de ferramentas de plataforma:
Se o seu destino for uma distribuição do WSL 2 e você não quiser usar o conjunto de ferramentas do WSL 2, no menu suspenso Conjunto de ferramentas da plataforma, selecione o conjunto de ferramentas GCC para Subsistema do Windows para Linux ou Clang para Subsistema do Windows para Linux. Se qualquer um desses conjuntos de ferramentas estiver selecionado, o Visual Studio não manterá uma cópia dos arquivos de origem no sistema de arquivos WSL e, em vez disso, acessará os arquivos de origem na unidade do Windows montada (/mnt/
...). Os cabeçalhos do sistema ainda são copiados automaticamente para o sistema de arquivos do Windows para proporcionar uma experiência nativa do IntelliSense. Personalize os cabeçalhos incluídos ou excluídos dessa cópia em Páginas de Propriedades>Geral.
Na maioria dos casos, é melhor usar o conjunto de ferramentas WSL 2 com distribuições WSL 2 porque o WSL 2 é mais lento quando os arquivos de projeto são armazenados no sistema de arquivos do Windows. Para saber mais, confira Comparação entre o WSL 1 e o WSL 2.
Confira também
Vídeo: Depurar C++ com distribuições WSL 2 e Visual Studio 2022
Baixar o Visual Studio 2022
Criar um projeto do CMake Linux no Visual Studio
Tutorial: Depurar um projeto do CMake em um computador Windows remoto