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.

  1. Instale o WSL e uma distribuição do WSL 2 seguindo as instruções em Instalar WSL.

  2. 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:

  1. Na tela Introdução do Visual Studio, selecione Criar um projeto.

    Captura de tela da caixa de diálogo de introdução do Visual Studio 2022. 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.":::

  2. 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.

  3. 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.

    Captura de tela das opções de projeto do Visual Studio. Cmake > Geral está selecionado.

    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.

  4. 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.

  5. 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.

    Captura de tela da lista suspensa do sistema de destino do Visual Studio. WSL2: o Ubuntu-20.04 é o selecionado.

    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.

  6. 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.

    Captura de tela do menu suspenso predefinido de configuração ativa do Visual Studio. Gerenciar configurações... está selecionado.

  7. 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.

  8. Configure o projeto no WSL 2. Se a geração de projeto não for iniciada automaticamente, invoque manualmente a configuração com Projeto>Configurarnome-do-projeto

    Captura de tela do menu suspenso de configuração do projeto do Visual Studio. A opção Configurar CMakeProject está selecionada.

  9. 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.

    Captura de tela de um prompt abaixo da barra de ferramentas do Visual Studio

    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."

  10. 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.

    Captura de tela da janela Saída do Visual Studio. Ela contém mensagens geradas durante a etapa de configuração, incluindo a conclusão da geração do C Make.

  11. Selecione o destino de depuração ativo. O menu suspenso de depuração lista todos os destinos do CMake disponíveis para o projeto.

    Captura de tela do menu suspenso de depuração do Visual Studio. CMakeProject está selecionado.

  12. Expanda a subpasta do projeto no Gerenciador de Soluções. No arquivo CMakeProject.cpp, defina um ponto de interrupção em main(). 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:

    Captura de tela do gerenciador de soluções do Visual Studio mostrando o botão para alternar as exibições. Ele está localizado à direita do botão inicial.

  13. 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:

    Captura de tela de um programa olá mundo em execução.

    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:

Captura de tela de uma lista suspensa do Visual Studio com o Conjunto de Ferramentas da Plataforma selecionado e, à direita, outra lista suspensa com o Conjunto de Ferramentas do WSL2 selecionado.

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