Configurar um projeto do Linux CMake no Visual Studio

O suporte ao Linux está disponível no Visual Studio 2017 e posterior. Para ver a documentação dessas versões, defina a lista suspensa de Versão localizada acima do sumário para o Visual Studio 2017 ou Visual Studio 2019.

Este tópico descreve como adicionar uma configuração do Linux a um projeto do CMake direcionado a um sistema Linux remoto ou WSL (Subsistema do Windows para Linux). Ele continua a série que começou com o Criar um projeto do CMake para o Linux no Visual Studio. Se você estiver usando o MSBuild, veja Configurar um projeto do MSBuild para o Linux no Visual Studio

Adicionar uma configuração do Linux

Uma configuração pode ser usada para ter diferentes plataformas (Windows, WSL, um sistema remoto) como destino usando o mesmo código-fonte. Uma configuração também é usada para definir seus compiladores, passar variáveis de ambiente e personalizar como o CMake é invocado. O arquivo CMakeSettings.json especifica algumas ou todas as propriedades listadas em Personalizar configurações do CMake, além de outras propriedades que controlam as configurações de build no computador Linux remoto.

Para alterar as configurações padrão do CMake no Visual Studio 2017, escolha CMake>Alterar Configurações do CMake>CMakeLists.txt no menu principal. Ou clique com o botão direito do mouse em CMakeLists.txt noGerenciador de Soluções e escolha Alterar Configurações do CMake. O Visual Studio então cria um arquivo CMakeSettings.json na pasta raiz do projeto. Para fazer alterações, abra o arquivo e modifique-o diretamente. Para obter mais informações, confira Personalizar configurações do CMake.

A configuração padrão para Linux-Debug no Visual Studio 2017 (e Visual Studio 2019 versão 16.0) tem essa aparência:

{
  "configurations": [
    {
      "name": "Linux-Debug",
      "generator": "Unix Makefiles",
      "remoteMachineName": "${defaultRemoteMachineName}",
      "configurationType": "Debug",
      "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
      "cmakeExecutable": "/usr/local/bin/cmake",
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
      "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
      "remoteCopySources": true,
      "remoteCopySourcesOutputVerbosity": "Normal",
      "remoteCopySourcesConcurrentCopies": "10",
      "remoteCopySourcesMethod": "rsync",
      "remoteCopySourcesExclusionList": [
        ".vs",
        ".git"
      ],
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [
        "linux_x64"
      ]
    }
  ]
}

Para alterar as configurações padrão do CMake no Visual Studio 2019 ou posterior, na barra de ferramentas principal, abra a lista suspensa Configuração e escolha Gerenciar Configurações.

Captura de tela mostrando Gerenciar Configurações do CMake realçado na lista suspensa Configuração.

Esse comando abre o Editor de Configurações do CMake que você pode usar para editar o arquivo CMakeSettings.json na pasta raiz do projeto. Você também pode abrir o arquivo com o editor do JSON clicando no botão Editar JSON no canto superior direito da caixa de diálogo Configurações do CMake. Para saber mais, confira Customize CMake Settings (Personalizar Configurações do CMake).

A configuração Linux-Debug padrão no Visual Studio 2019 versão 16.1 e posteriores tem essa aparência:

{
  "configurations": [
    {
      "name": "Linux-GCC-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "cmakeExecutable": "cmake",
      "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [ "linux_x64" ],
      "remoteMachineName": "${defaultRemoteMachineName}",
      "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
      "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
      "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",
      "remoteCopySources": true,
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "remoteCopySourcesMethod": "rsync",
      "variables": []
    }
  ]
}

No Visual Studio 2019 versão 16.6 ou posterior, o Ninja é o gerador padrão para configurações direcionadas a um sistema remoto ou WSL, em oposição ao Unix Makefiles. Para obter mais informações, veja essa postagem no Blog da Equipe do C++.

Para saber mais informações sobre essas configurações, confira Referência do CMakeSettings.json.

Quando você faz um build:

  • Se tiver um sistema remoto como destino, o Visual Studio escolherá o primeiro sistema remoto da lista em Ferramentas>Opções>Multiplataforma>Gerenciador de Conexões por padrão para destinos remotos.
  • Se nenhuma conexão remota for encontrada, será solicitado que você crie uma. Para obter mais informações, confira Conectar-se ao seu computador Linux remoto.

Escolha um destino do Linux

Quando você abre uma pasta de projeto do CMake, o Visual Studio analisa o arquivo CMakeLists.txt e especifica um destino do Windows correspondente a x86-Debug. Para direcionar a um sistema Linux remoto, você deverá alterar as configurações do projeto com base no seu compilador do Linux. Por exemplo, se você estiver usando o GCC no Linux e compilando com informações de depuração, escolha: Linux-GCC-Debug ou Linux-GCC-Release.

Se você especificar um destino remoto do Linux, a origem será copiada para o sistema remoto.

Depois que você seleciona um destino, o CMake é executado automaticamente no sistema Linux para gerar o cache do CMake para o projeto:

Captura de tela do Visual Studio mostrando a saída de Gerar o cache do CMake no Linux.

Destinar ao Subsistema do Windows para Linux

Se você estiver direcionando ao WSL (Subsistema do Windows para Linux), não será necessário adicionar uma conexão remota.

Para direcionar ao WSL, selecione Gerenciar Configurações na lista suspensa de configuração da barra de ferramentas principal:

Lista suspensa de configurações do CMake com a opção Gerenciar Configurações selecionada

A janela CMakeSettings.json é exibida.

Caixa de diálogo de configurações do CMake com o botão de adição realçado, o qual adiciona a configuração selecionada, que é Linux-GCC-debug.

Pressione Adicionar Configuração (o botão verde "+") e escolha Linux-GCC-Debug ou Linux-GCC-Release se estiver usando o GCC. Use as variantes da Clang se você estiver usando o conjunto de ferramentas Clang/LLVM. Pressione Selecionar e, em seguida , Ctrl+S para salvar a configuração.

Visual Studio 2019 versão 16.1 Quando você direciona ao WSL, o Visual Studio não precisa copiar arquivos de origem nem manter duas cópias síncronas da árvore de build, porque o compilador, no Linux, tem acesso direto aos seus arquivos de origem no sistema de arquivos do Windows montado.

IntelliSense

O IntelliSense do C++ preciso requer acesso aos cabeçalhos do C++ referenciados pelos arquivos de origem do C++. O Visual Studio usa automaticamente os cabeçalhos referenciados por um projeto do CMake do Linux para o Windows para fornecer uma experiência IntelliSense totalmente fiel. Para obter mais informações, veja IntelliSense para cabeçalhos remotos.

Configuração de localidade

As configurações de idioma do Visual Studio não são propagadas para destinos do Linux porque o Visual Studio não gerencia nem configura pacotes instalados. As mensagens mostradas na janela Saída, como erros de build, são mostradas usando o idioma e a localidade do destino do Linux. Você precisará configurar os destinos do Linux de acordo com a localidade desejada.

Mais configurações

Use as configurações a seguir para executar comandos no sistema Linux antes e depois do build e antes da geração do CMake. Os valores podem ser qualquer comando válido no sistema remoto. A saída é canalizada para o Visual Studio.

{
      "remotePrebuildCommand": "",
      "remotePreGenerateCommand": "",
      "remotePostbuildCommand": "",
}

Próximas etapas

Configurar sessões de depuração do CMake

Confira também

Trabalhando com propriedades do projeto
Personalizar as configurações do CMake
Referência de configuração predefinida do CMake