Configurare un progetto CMake per Linux in Visual Studio

Il supporto per Linux è disponibile in Visual Studio 2017 e versioni successive. Per visualizzare la documentazione per queste versioni, impostare l'elenco a discesa Versione che si trova sopra il sommario su Visual Studio 2017 o Visual Studio 2019.

Questo argomento descrive come aggiungere una configurazione Linux a un progetto CMake destinato a un sistema Linux remoto o sottosistema Windows per Linux (WSL). Continua la serie iniziata con Creare un progetto CMake Linux in Visual Studio. Se invece si usa MSBuild, vedere Configurare un progetto MSBuild Linux in Visual Studio

Aggiungere una configurazione linux

Una configurazione può essere usata per usare piattaforme diverse (Windows, WSL, un sistema remoto) con lo stesso codice sorgente. Viene usata anche una configurazione per impostare i compilatori, passare le variabili di ambiente e personalizzare la modalità di chiamata di CMake. Il file CMakeSettings.json specifica alcune o tutte le proprietà elencate in Personalizzare le impostazioni di CMake, oltre ad altre proprietà che controllano le impostazioni di compilazione nel computer Linux remoto.

Per modificare le impostazioni predefinite di CMake in Visual Studio 2017, scegliere CMake Change CMake Settings (Modifica impostazioni>CMake>) CMakeLists.txt dal menu principale. In alternativa, fare clic con il pulsante destro del mouse CMakeLists.txt in Esplora soluzioni e scegliere Modifica impostazioni CMake. Visual Studio crea quindi un nuovo file CMakeSettings.json nella cartella del progetto radice. Per apportare modifiche, aprire il file e modificarlo direttamente. Per altre informazioni, vedere Customize CMake settings (Personalizzare le impostazioni di CMake).

La configurazione predefinita per Linux-Debug in Visual Studio 2017 (e Visual Studio 2019 versione 16.0) è simile alla seguente:

{
  "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"
      ]
    }
  ]
}

Per modificare le impostazioni predefinite di CMake in Visual Studio 2019 o versione successiva, dalla barra degli strumenti principale aprire l'elenco a discesa Configurazione e scegliere Gestisci configurazioni.

Screenshot che mostra CMake Manage Configurations evidenziato nell'elenco a discesa Configurazione.

Questo comando apre l'editor delle impostazioni di CMake, che è possibile usare per modificare il file CMakeSettings.json nella cartella del progetto radice. È anche possibile aprire il file con l'editor JSON facendo clic sul pulsante Modifica JSON in alto a destra della finestra di dialogo Impostazioni CMake. Per altre informazioni, vedere Personalizzare le impostazioni di CMake.

La configurazione predefinita di Linux-Debug in Visual Studio 2019 versione 16.1 e successive ha un aspetto simile al seguente:

{
  "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": []
    }
  ]
}

In Visual Studio 2019 versione 16.6 o successiva Ninja è il generatore predefinito per le configurazioni destinate a un sistema remoto o WSL, anziché a Makefile Unix. Per altre informazioni, vedere questo post nel blog del team C++.

Per altre informazioni su queste impostazioni, vedere Informazioni di riferimento su CMakeSettings.json.

Quando si esegue una compilazione:

  • Se si usa un sistema remoto, Visual Studio sceglie il primo sistema remoto nell'elenco in Strumenti>Opzioni>multipiattaforma> Gestione connessioni per impostazione predefinita per le destinazioni remote.
  • Se non vengono trovate connessioni remote, viene richiesto di crearne uno. Per altre informazioni, vedere Connettersi al computer Linux remoto.

Scegliere una destinazione Linux

Quando si apre una cartella di progetto CMake, Visual Studio analizza il file di CMakeLists.txt e specifica una destinazione Windows di x86-Debug. Per impostare come destinazione un sistema Linux remoto, si modificheranno le impostazioni del progetto in base al compilatore Linux. Ad esempio, se si usa GCC in Linux e si compila con informazioni di debug, scegliere Linux-GCC-Debug o Linux-GCC-Release.

Se si specifica una destinazione Linux remota, il codice sorgente viene copiato nel sistema remoto.

Dopo aver selezionato una destinazione, CMake viene eseguito automaticamente nel sistema Linux per generare la cache CMake per il progetto:

Screenshot di Visual Studio che mostra l'output di Genera cache CMake in Linux.

Sottosistema Windows per Linux di destinazione

Se la destinazione è sottosistema Windows per Linux (WSL), non è necessario aggiungere una connessione remota.

Per usare WSL di destinazione, selezionare Gestisci configurazioni nell'elenco a discesa della configurazione nella barra degli strumenti principale:

Elenco a discesa Configurazioni di CMake con l'opzione Gestisci configurazioni selezionata

Viene visualizzata la finestra CMakeSettings.json .

Finestra di dialogo delle impostazioni di CMake con il pulsante più evidenziato che aggiunge la configurazione selezionata, ovvero Linux-GCC-debug.

Premere Aggiungi configurazione (pulsante verde '+') e quindi scegliere Linux-GCC-Debug o Linux-GCC-Release se si usa GCC. Usare le varianti Clang se si usa il set di strumenti Clang/LLVM. Premere Seleziona e quindi CTRL+S per salvare la configurazione.

Visual Studio 2019 versione 16.1 Quando si usa WSL come destinazione, Visual Studio non deve copiare i file di origine e gestire due copie sincrone dell'albero di compilazione perché il compilatore in Linux ha accesso diretto ai file di origine nel file system Windows montato.

IntelliSense

IntelliSense C++ accurato richiede l'accesso alle intestazioni C++ a cui fanno riferimento i file di origine C++. Visual Studio usa automaticamente le intestazioni a cui fa riferimento un progetto CMake da Linux a Windows per offrire un'esperienza IntelliSense completamente fedele. Per altre informazioni, vedere IntelliSense per le intestazioni remote.

Impostazione delle impostazioni locali

Le impostazioni del linguaggio di Visual Studio non vengono propagate alle destinazioni Linux perché Visual Studio non gestisce o configura i pacchetti installati. I messaggi visualizzati nella finestra Output, ad esempio gli errori di compilazione, vengono visualizzati usando la lingua e le impostazioni locali della destinazione Linux. Sarà necessario configurare le destinazioni Linux per le impostazioni locali desiderate.

Altre impostazioni

Usare le impostazioni seguenti per eseguire i comandi nel sistema Linux prima e dopo la compilazione e prima della generazione di CMake. I valori possono essere costituiti da qualsiasi comando valido nel sistema remoto. L'output viene reindirizzato a Visual Studio.

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

Passaggi successivi

Configurare le sessioni di debug di CMake

Vedi anche

Utilizzo delle proprietà del progetto
Personalizzare le impostazioni di CMake
Informazioni di riferimento sulle configurazioni predefinite CMake