Procédure pas à pas : Générer et déboguer C++ avec WSL 2 et Visual Studio 2022

Visual Studio 2022 inaugure un ensemble d’outils C++ natifs pour le développement avec le Sous-système Windows pour Linux version 2 (WSL 2). Ces outils sont disponibles dans Visual Studio 2022 version 17.0 ou ultérieure.

WSL 2 est la nouvelle version recommandée du Sous-système Windows pour Linux (WSL). Il offre des performances optimales sur le système de fichiers Linux, ainsi qu’une prise en charge de l’interface graphique utilisateur et une compatibilité complète avec les appels système. L’ensemble d’outils WSL 2 de Visual Studio vous permet d’utiliser ce dernier pour compiler et déboguer du code C++ sur des distributions WSL 2, sans ajouter de connexion SSH. Vous pouvez déjà compiler et déboguer du code C++ sur des distributions WSL 1 à l’aide de l’ensemble d’outils natifs WSL 1 inauguré dans Visual Studio 2019 version 16.1.

L’ensemble d’outils WSL 2 de Visual Studio prend en charge les projets Linux basés sur CMake et MSBuild. Nous vous recommandons CMake pour tous les développements multiplateformes C++ avec Visual Studio. Nous vous recommandons CMake, car il compile et débogue le même projet sur les systèmes Windows, WSL et distants.

Pour une présentation vidéo des informations contenues dans cette rubrique, consultez Vidéo : déboguer C++ avec des distributions WSL 2 et Visual Studio 2022.

Arrière-plan de l’ensemble d’outils WSL 2

La prise en charge multiplateforme de C++ dans Visual Studio repose sur l’hypothèse que tous les fichiers sources proviennent du système de fichiers Windows. Lorsque vous ciblez une distribution WSL 2, Visual Studio exécute une commande rsync locale pour copier des fichiers du système de fichiers Windows vers le système de fichiers WSL. La copie rsync locale ne nécessite aucune intervention de l’utilisateur. Elle se produit automatiquement lorsque Visual Studio détecte que vous utilisez une distribution WSL 2. Pour en savoir plus sur les différences entre WSL 1 et WSL 2, consultez Comparaison entre WSL 1 et WSL 2.

L’intégration des présélections CMake dans Visual Studio prend en charge l’ensemble d’outils WSL 2. Pour en savoir plus, consultez Intégration des présélections CMake dans Visual Studio et Visual Studio Code et Configurer et compiler du code avec des présélections CMake dans Visual Studio. Vous trouverez également davantage d’informations dans la section Considérations relatives aux projets WSL 2 et CMake avancés de cet article.

Installer les outils de build

Installez les outils nécessaires pour compiler et déboguer sur WSL 2. Dans une étape ultérieure, vous allez installer une version récente de CMake à l’aide du déploiement binaire intégré de Visual Studio.

  1. Installez WSL et une distribution WSL 2 en suivant les instructions de la section Installer WSL.

  2. En supposant que votre distribution utilise apt (cette procédure pas à pas repose sur Ubuntu), utilisez les commandes suivantes pour installer les outils de génération nécessaires sur votre distribution WSL 2 :

    sudo apt update
    sudo apt install g++ gdb make ninja-build rsync zip
    

    Les commandes apt ci-dessus sont installées :

    • Compilateur C++
    • gdb
    • CMake
    • rsync
    • zip
    • Générateur de système de génération sous-jacent

Développement CMake multiplateforme avec une distribution WSL 2

Cette procédure pas à pas utilise GCC et Ninja sur Ubuntu. Visual Studio 2022 version 17.0 préversion 2 ou version ultérieure.

Visual Studio définit un projet CMake en tant que dossier avec un fichier CMakeLists.txt à la racine du projet. Dans cette procédure pas à pas, vous allez créer un projet CMake à l’aide du modèle Projet CMake Visual Studio :

  1. Dans l’écran Démarrage de Visual Studio, sélectionnez Créer un projet.

    Capture d’écran de la boîte de dialogue de démarrage de Visual Studio 2022. Voici les options disponibles : cloner un référentiel, ouvrir un projet ou une solution, ouvrir un dossier local, créer un projet ou Continuer sans code.

  2. Dans la zone de texte Rechercher des modèles, saisissez « cmake ». Choisissez le type Projet CMake, puis sélectionnez Suivant. Attribuez un nom et un emplacement au projet, puis sélectionnez Créer.

  3. Activez l’intégration des présélections CMake de Visual Studio. Sélectionnez Outils>Options>CMake>Général. Sélectionnez Privilégier l’utilisation des présélections CMake pour la configuration, le build et les tests, puis sélectionnez OK. Une autre solution consiste à ajouter un fichier CMakePresets.json à la racine du projet. Pour plus d’informations, consultez Activer l’intégration des présélections CMake.

    Capture d’écran des options du projet Visual Studio. CMake > Général est sélectionné.

    Dans le groupe de fichiers config CMake, l’option « Privilégier les présélections CMake si elles sont disponibles ; dans le cas contraire, utiliser CMakeSettings.json » est appelée et est sélectionnée.

  4. Pour activer l’intégration, dans le menu principal, sélectionnez Fichier>Fermer le dossier. La page Démarrage s’affiche. Sous Ouvrir les dossiers récents, sélectionnez le dossier que vous venez de fermer pour le rouvrir.

  5. La barre de menus principale de Visual Studio comporte trois listes déroulantes. Accédez à la liste déroulante sur la gauche pour sélectionner le système cible actif. Il s’agit du système dans lequel CMake est appelé pour configurer et compiler le projet. Requêtes Visual Studio pour les installations WSL avec wsl -l -v. Dans l’image suivante, WSL2 : Ubuntu-20.04 est sélectionné comme système cible.

    Capture d’écran de la liste déroulante des systèmes cible Visual Studio. WSL2 : Ubuntu-20.04 est l’option sélectionnée.

    Remarque

    Si Visual Studio commence à configurer automatiquement votre projet, lisez l’étape 11 pour gérer le déploiement binaire CMake, puis passez à l’étape ci-dessous. Pour personnaliser ce comportement, consultez Modifier la configuration automatique et les notifications de cache.

  6. Faites défiler la liste jusqu’au milieu pour sélectionner la présélection de configuration active. La présélection de configuration indique à Visual Studio comment appeler CMake et générer le système de build sous-jacent. À l’étape 7, la présélection de configuration active est la présélection linux-default créée par Visual Studio. Pour créer une présélection de configuration personnalisée, sélectionnez Gérer les configurations…. Pour en savoir plus sur les présélections de configurations, consultez Sélectionner une présélection de configuration, puis Modifier les présélections.

    Capture d’écran de la liste déroulante de présélections de configurations actives Visual Studio. Gérer les configurations… est sélectionné.

  7. Accédez à la liste déroulante sur la droite pour sélectionner la présélection de build active. Les présélections de build indiquent à Visual Studio comment appeler le build. Dans l’illustration de l’étape 7, la présélection de build active est celle par défaut créée par Visual Studio. Pour plus d’informations sur les présélections de build, consultez Sélectionner une présélection de build.

  8. Configurez le projet sur WSL 2. Si la génération de projet ne démarre pas automatiquement, appelez manuellement la configuration avec Projet>Configurer nom-projet.

    Capture d’écran de la liste déroulante du projet Visual Studio. L’option Configurer CMakeProject est sélectionnée.

  9. Si vous n’avez pas de version prise en charge de CMake installée sur votre distribution WSL 2, Visual Studio vous invite via le ruban de menu principal à déployer une version récente de CMake. Sélectionnez Oui pour déployer des fichiers binaires CMake dans votre distribution WSL 2.

    Capture d’écran d’un prompt sous la barre d’outils Visual Studio

    L’utilisateur est invité à installer les fichiers binaires CMake les plus récents à partir de l’organisation CMake, car la version de CMake prise en charge n’est pas installée.

  10. Vérifiez que l’étape de configuration est terminée et que vous pouvez voir le message Génération CMake terminée dans la fenêtre Sortie sous le volet CMake. Les fichiers de build sont écrits dans un répertoire dans le système de fichiers de la distribution WSL 2.

    Capture d’écran de la fenêtre Sortie dans Visual Studio. Il contient les messages générés pendant l’étape de configuration, notamment le message d’achèvement de la génération CMake.

  11. Sélectionnez la cible de débogage actif. Le menu déroulant de débogage liste toutes les cibles CMake disponibles pour le projet.

    Capture d’écran de la liste déroulante de débogage de Visual Studio. CMakeProject est sélectionné.

  12. Développez le sous-dossier du projet dans l’Explorateur de solutions. Dans le fichier CMakeProject.cpp, définissez un point d’arrêt dans main(). Vous pouvez également accéder à l’affichage des cibles CMake en sélectionnant le bouton Sélecteur d’affichage dans l’Explorateur de solutions, mis en évidence dans la capture d’écran suivante :

    Capture d’écran du bouton de changement de vue dans l’Explorateur de solutions Visual Studio. Il est situé à droite du bouton d’accueil.

  13. Sélectionnez Déboguer>Démarrer ou appuyez sur la touche F5. Votre projet est compilé, l’exécutable est lancé sur votre distribution WSL 2 et Visual Studio interrompt l’exécution au point d’arrêt. La sortie de votre programme (dans ce cas, "Hello CMake.") est visible dans la fenêtre de console Linux :

    Capture d’écran d’un programme hello world en cours d’exécution.

    La fenêtre de console Linux de Visual Studio affiche la sortie du programme : « Hello CMake ». La fenêtre de l’éditeur affiche le programme hello world. L’exécution s’est interrompue à un point d’arrêt sur la ligne qui indique return 0;.

Vous avez créé et débogué une application C++ avec WSL 2 et Visual Studio 2022.

Considérations avancées relatives aux projets WSL 2 et CMake

Visual Studio assure uniquement la prise en charge native des projets WSL 2 pour CMake qui utilisent le fichier de configuration actif CMakePresets.json. Pour migrer de CMakeSettings.json vers CMakePresets.json, consultez Activer l’intégration des présélections CMake dans Visual Studio.

Si vous ciblez une distribution WSL 2 et que vous ne souhaitez pas utiliser l’ensemble d’outils WSL 2, définissez forceWSL1Toolset sur true dans la carte des fournisseurs de paramètres distants Visual Studio dans CMakePresets.json. Pour plus d’informations, consultez la carte des fournisseurs de paramètres Visual Studio.

Si forceWSL1Tooslet est défini sur true, Visual Studio ne conserve pas de copie de vos fichiers sources dans le système de fichiers WSL. Au lieu de cela, il accède aux fichiers sources dans le lecteur Windows monté (/mnt/…).

Dans la plupart des situations, l’utilisation de l’ensemble d'outils WSL 2 avec des distributions correspondantes est recommandée, car WSL 2 s’avère plus lent lorsque les fichiers projet sont plutôt stockés dans le système de fichiers Windows. Pour en savoir plus sur les performances du système de fichiers dans WSL 2, consultez Comparaison entre WSL 1 et WSL 2.

Spécifiez des paramètres avancés, comme le chemin d’accès au répertoire sur WSL 2 dans lequel le projet est copié. Ensuite, copiez les options sources et les arguments de commande rsync dans la carte des fournisseurs de paramètres distants Visual Studio dans CMakePresets.json. Pour plus d’informations, consultez la carte des fournisseurs de paramètres Visual Studio.

Les en-têtes système sont automatiquement copiés dans le système de fichiers Windows afin de fournir l’expérience IntelliSense native. Vous pouvez personnaliser les en-têtes inclus ou exclus de cette copie dans la carte de fournisseurs de paramètres distants Visual Studio dans CMakePresets.json.

Vous pouvez modifier le mode IntelliSense ou spécifier d’autres options IntelliSense dans la carte des fournisseurs de paramètres Visual Studio dans CMakePresets.json. Pour plus d’informations sur la carte des fournisseurs, consultez Carte des fournisseurs de paramètres distants Visual Studio.

Projets Linux basés sur WSL 2 et MSBuild

CMake est recommandé pour tout développement multiplateforme C++ avec Visual Studio, car il vous permet de compiler et de déboguer le même projet sur Windows, WSL et les systèmes distants.

Toutefois, vous disposez peut-être d’un projet Linux basé sur MSBuild.

Si vous disposez d’un projet Linux basé sur MSBuild, vous pouvez effectuer une mise à niveau vers l’ensemble d’outils WSL 2 dans Visual Studio. Cliquez avec le bouton droit sur le projet dans l’Explorateur de solutions, puis choisissez Propriétés>Général>Ensemble d’outils de plateforme :

Capture d’écran d’une liste déroulante Visual Studio avec l’ensemble d’outils de plateforme sélectionné et, à droite, une autre liste déroulante avec l’ensemble d’outils WSL2 sélectionné.

Si vous ciblez une distribution WSL 2 et que vous ne souhaitez pas utiliser l’ensemble d’outils WSL 2, dans la liste déroulante Ensemble d’outils de plateforme, sélectionnez l’ensemble d’outils GCC pour le Sous-système Windows pour Linux ou Clang pour le Sous-système Windows pour Linux. Si l’un de ces ensembles d’outils est sélectionné, Visual Studio n’enregistre pas de copie de vos fichiers sources dans le système de fichiers WSL. Au lieu de cela, il accède aux fichiers sources depuis le lecteur Windows monté (/mnt/…). Les en-têtes système sont automatiquement copiés dans le système de fichiers Windows afin de fournir une expérience IntelliSense native. Personnalisez les en-têtes inclus ou exclus de cette copie dans Pages de propriétés>Général.

Dans la plupart des situations, l’utilisation de l’ensemble d'outils WSL 2 avec des distributions correspondantes est recommandée, car WSL 2 s’avère plus lent lorsque les fichiers projet sont stockés dans le système de fichiers Windows. Pour plus d’informations, consultez Comparaison entre WSL 1 et WSL 2.

Voir aussi

Vidéo : déboguer C++ à l’aide de distributions WSL 2 et Visual Studio 2022
Télécharger Visual Studio 2022
Créer un projet Linux CMake dans Visual Studio
Tutoriel : déboguer un projet CMake sur une machine Windows distante