Partager via


Tutoriel : Créer des projets multiplateformes C++ dans Visual Studio

Le développement Visual Studio C et C++ n’est plus destiné à Windows. Ce tutoriel montre comment utiliser Visual Studio pour le développement multiplateforme C++ sur Windows et Linux. Elle est basée sur CMake. Vous n’avez donc pas besoin de créer ou de générer des projets Visual Studio. Lorsque vous ouvrez un dossier contenant un fichier CMakeLists.txt, Visual Studio configure automatiquement les paramètres IntelliSense et de génération. Vous pouvez rapidement commencer à modifier, générer et déboguer votre code localement sur Windows. Ensuite, basculez votre configuration pour effectuer la même opération sur Linux, à partir de Visual Studio.

Dans ce tutoriel, vous allez apprendre à :

  • cloner un projet CMake open source à partir de GitHub
  • ouvrir le projet dans Visual Studio
  • générer et déboguer une cible exécutable sur Windows
  • ajouter une connexion à une machine Linux
  • compiler et déboguer la même cible sur Linux

Conditions préalables

  • Configurer Visual Studio pour le développement C++ multiplateforme

    • Tout d’abord, installez Visual Studio et choisissez le développement Desktop avec C++ et le développement Linux avec des charges de travail C++. Cette installation minimale est de seulement 3 Go. Selon la vitesse de téléchargement, l’installation ne doit pas prendre plus de 10 minutes.
  • Configurer une machine Linux pour le développement C++ multiplateforme

    • Visual Studio ne nécessite aucune distribution spécifique de Linux. Le système d’exploitation peut s’exécuter sur une machine physique, dans une machine virtuelle ou dans le cloud. Vous pouvez également utiliser le sous-système Windows pour Linux (WSL). Toutefois, pour ce didacticiel, un environnement graphique est requis. WSL n’est pas recommandé ici, car il est principalement destiné aux opérations de ligne de commande.

    • Visual Studio nécessite ces outils sur l’ordinateur Linux : compilateurs C++, gdb, , ssh, rsyncmakeet zip. Sur les systèmes Debian, vous pouvez utiliser cette commande pour installer ces dépendances :

      sudo apt install -y openssh-server build-essential gdb rsync make zip
      
    • Visual Studio nécessite une version récente de CMake sur l’ordinateur Linux sur lequel le mode serveur est activé (au moins 3.8). Microsoft produit une build universelle de CMake que vous pouvez installer sur n’importe quelle distribution Linux. Nous vous recommandons d’utiliser cette build pour vous assurer que vous disposez des fonctionnalités les plus récentes. Vous pouvez obtenir les fichiers binaires CMake depuis la branche dérivée de Microsoft du référentiel CMake sur GitHub. Accédez à cette page et téléchargez la version qui correspond à l’architecture système sur votre machine Linux, puis marquez-la en tant qu’exécutable :

      wget <path to binary>
      chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
      
    • Vous pouvez voir les options permettant d’exécuter le script avec --help. Nous vous recommandons d’utiliser l’option permettant de spécifier l’installation -prefix dans le chemin /usr , car /usr/bin est l’emplacement par défaut où Visual Studio recherche CMake. L’exemple suivant montre le script linux-x86_64. Modifiez-le si nécessaire si vous utilisez une autre plateforme cible.

      sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
      
  • Git pour windows installé sur votre ordinateur Windows.

  • Un compte GitHub.

Cloner un projet CMake open source à partir de GitHub

Ce tutoriel utilise le Kit de développement logiciel (SDK) Bullet Physics sur GitHub. Il fournit des simulations de détection de collision et de physique pour de nombreuses applications. Le Kit de développement logiciel (SDK) inclut des exemples de programmes exécutables qui compilent et s’exécutent sans avoir à écrire d’autres codes. Ce didacticiel ne modifie pas le code source ni les scripts de génération. Pour commencer, clonez le dépôt bullet3 à partir de GitHub sur l’ordinateur sur lequel Visual Studio est installé.

git clone https://github.com/bulletphysics/bullet3.git
  1. Dans le menu principal de Visual Studio, choisissez Ouvrir un fichier >> CMake. Accédez au fichier CMakeLists.txt situé à la racine du référentiel bullet3 que vous avez téléchargé.

    Capture d’écran du menu Visual Studio montrant File > Open > C Make. Un dossier n’a pas encore été ouvert. Il s’agit simplement du menu ouvert à ce stade.

    Dès que vous ouvrez le dossier, votre structure de dossiers devient visible dans l’Explorateur de solutions.

    Capture d’écran de la fenêtre Explorateur de solutions en mode Affichage dossier. Il affiche le contenu du projet (fichiers et dossiers) et CMakeLists.txt est mis en surbrillance.

    Cette vue vous montre exactement ce qui se trouve sur le disque, pas une vue logique ou filtrée. Par défaut, il n’affiche pas les fichiers masqués.

  2. Choisissez le bouton Afficher tous les fichiers pour afficher tous les fichiers du dossier.

    Capture d’écran de la fenêtre Explorateur de solutions avec le bouton Afficher tous les fichiers mis en surbrillance. Ce bouton se trouve en haut de la fenêtre de l’Explorateur de solutions et à droite.

Basculer vers la vue des cibles

Lorsque vous ouvrez un dossier qui utilise CMake, Visual Studio génère automatiquement le cache CMake. Cette opération peut prendre quelques instants, en fonction de la taille de votre projet.

  1. Dans la fenêtre Sortie, sélectionnez Afficher la sortie , puis choisissez CMake pour surveiller l’état du processus de génération du cache. Une fois l’opération terminée, elle indique « Extraction d’informations cibles terminée ».

    Capture d’écran de la fenêtre Sortie. La liste déroulante Afficher la sortie depuis : est réglée sur CMake.

    Une fois cette opération terminée, IntelliSense est configuré. Vous pouvez générer le projet et déboguer l’application. Visual Studio affiche désormais une vue logique de la solution, en fonction des cibles spécifiées dans les fichiers CMakeLists.

  2. Utilisez le bouton Solutions et Dossiers dans l’Explorateur de Solutions afin de basculer vers la Vue des Cibles CMake.

    Capture d’écran du bouton Solutions et Dossiers dans l’Explorateur de solutions. Il est sélectionné, affichant une liste déroulante avec un choix pour c :\projects\bullet3 et un autre choix pour la vue de cibles CMake, qui est sélectionnée.

    Voici à quoi ressemble cette vue pour le Kit de développement logiciel (SDK) Bullet :

    Capture d’écran de l’affichage des cibles CMake de l’Explorateur de solutions. Il contient une entrée appelée BULLET_PHYSICS Project, sous laquelle sont des entrées comme App_BasicExample (exécutable), App_ExampleBrowser (exécutable), et ainsi de suite.

    La vue des cibles offre une vue plus intuitive du contenu de cette base de code source. Vous pouvez voir que certaines cibles sont des bibliothèques et d’autres sont des exécutables.

  3. Développez un nœud dans la vue des cibles de CMake pour voir les fichiers de code source associés, quel que soit leur emplacement sur le disque.

Ajouter une configuration Windows x64-Debug explicite

Visual Studio crée une configuration x64-Debug par défaut pour Windows. Les configurations sont la façon dont Visual Studio comprend la cible de plateforme qu’il va utiliser pour CMake. La configuration par défaut n’est pas représentée sur le disque. Lorsque vous ajoutez explicitement une configuration, Visual Studio crée un fichier appelé CMakeSettings.json. Il est rempli avec les paramètres de toutes les configurations que vous spécifiez.

  1. Ajoutez une nouvelle configuration. Ouvrez la liste déroulante Configuration dans la barre d’outils et sélectionnez Gérer les configurations.

    Capture d’écran de la liste déroulante Configuration dans la barre d’outils. Gérer les configurations... est sélectionné.

    L’éditeur de paramètres CMake s’ouvre. Sélectionnez le signe plus vert situé à gauche de l’éditeur pour ajouter une nouvelle configuration. La boîte de dialogue Ajouter une configuration à CMakeSettings s’affiche :

    Capture d’écran de la boîte de dialogue Ajouter une configuration à CMakeSettings. Il contient des entrées telles que Linux-Debug, x86-Debug. X64-Debug est sélectionné.

    Cette boîte de dialogue affiche toutes les configurations incluses dans Visual Studio, ainsi que toutes les configurations personnalisées que vous créez. Si vous souhaitez continuer à utiliser une configuration x64-Debug qui doit être la première que vous ajoutez. Sélectionnez x64-Debug, puis choisissez le bouton Sélectionner . Visual Studio crée le fichier CMakeSettings.json avec une configuration pour x64-Debug et l’enregistre sur le disque. Vous pouvez utiliser les noms que vous aimez pour vos configurations en modifiant le paramètre de nom directement dans CMakeSettings.json.

Définir un point d’arrêt, générer et exécuter sur Windows

Dans cette étape, nous débogueons un exemple de programme qui illustre la bibliothèque Bullet Physics.

  1. Dans l’Explorateur de solutions, sélectionnez AppBasicExampleGui et développez-le.

  2. Ouvrez le fichier BasicExample.cpp.

  3. Définissez un point d’arrêt qui est atteint lorsque vous cliquez dans l’application en cours d’exécution. L’événement clic est géré au sein d'une méthode d'une classe d’assistance. Pour y accéder rapidement :

    1. Sélectionnez CommonRigidBodyBase dont la structure BasicExample est dérivée. C’est autour de la ligne 30.

    2. Cliquez avec le bouton droit et choisissez Atteindre la définition. Vous êtes maintenant dans l’en-tête CommonRigidBodyBase.h.

    3. Vous devriez voir dans l'affichage du navigateur, au-dessus de votre source, que vous êtes dans le CommonRigidBodyBase. À droite, vous pouvez sélectionner des membres à examiner. Ouvrez la liste déroulante et sélectionnez mouseButtonCallback pour accéder à la définition de cette fonction dans l’en-tête.

      Capture d’écran de la barre d'outils de la liste des membres déroulante dans la fenêtre de l’éditeur. La liste répertorie les fonctions telles que getRayTo(in x, int y). La méthode de rappel du clic de la souris est mise en surbrillance.

  4. Ajoutez un point d’arrêt sur la première ligne dans cette fonction. Il est déclenché lorsque vous cliquez sur un bouton de la souris dans la fenêtre de l'application, pendant qu'elle est exécutée sous le débogueur Visual Studio.

  5. Pour lancer l’application, sélectionnez la liste déroulante de lancement dans la barre d’outils. Il s'agit de l'icône verte avec la mention « Sélectionner un élément de démarrage ». Dans le menu déroulant, sélectionnez AppBasicExampleGui.exe. Le nom exécutable s’affiche maintenant sur le bouton de lancement :

    Capture d’écran de la liste déroulante de lancement de la barre d’outils Visual Studio. AppBasicExampleGui.exe est sélectionné, mais d’autres options sont visibles telles que App_ExampleBrowser.exe, App_HelloWorld.exeet d’autres.

  6. Choisissez le bouton de lancement pour générer l’application et les dépendances nécessaires, puis lancez-la avec le débogueur Visual Studio attaché. Après quelques instants, l’application en cours d’exécution s’affiche :

    Capture d’écran de l’application en cours d’exécution. Il s’agit d’une collection de blocs colorés sur un plan jaune.

  7. Déplacez votre souris dans la fenêtre de l’application, puis cliquez sur un bouton pour déclencher le point d’arrêt. Le point d’arrêt ramène Visual Studio au premier plan, et l’éditeur affiche la ligne où l’exécution est suspendue. Vous pouvez inspecter les variables d’application, les objets, les threads et la mémoire, ou parcourir votre code de manière interactive. Choisissez Continuer de laisser l’application reprendre, puis quittez-la normalement. Ou, arrêtez l’exécution dans Visual Studio à l’aide du bouton d’arrêt.

Ajouter une configuration Linux et se connecter à l’ordinateur distant

  1. Ajoutez une configuration Linux. Cliquez avec le bouton droit sur le fichier CMakeSettings.json dans l’affichage Explorateur de solutions , puis sélectionnez Ajouter une configuration. Vous voyez la même boîte de dialogue Ajouter une configuration à CMakeSettings que précédemment. Sélectionnez Linux-Debug cette fois, puis enregistrez le fichier CMakeSettings.json (ctrl+ s).

  2. Visual Studio 2019 version 16.6 ou ultérieure Faites défiler vers le bas de l’éditeur de paramètres CMake, puis sélectionnez Afficher les paramètres avancés. Sélectionnez Makefiles Unix comme générateur CMake, puis enregistrez le fichier CMakeSettings.json (ctrl+ s).

  3. Sélectionnez Linux-Debug dans la liste déroulante de configuration.

    Capture d’écran de la liste déroulante de configuration de lancement. Les options visibles sont les suivantes : x64-Debug, Linux-Debug et Manage Configurations.

    Si c’est la première fois que vous vous connectez à un système Linux, la boîte de dialogue Se connecter au système distant s’affiche.

    Capture d’écran de la boîte de dialogue Visual Studio Connect to Remote System.

    La boîte de dialogue contient des champs pour le nom d’hôte, le port, le nom d’utilisateur, le type d’authentification et le mot de passe. Tous les champs sont vides, sauf que le port est défini sur 22 et le type d’authentification est défini sur Mot de passe.

    Si vous avez déjà ajouté une connexion à distance, vous pouvez ouvrir cette fenêtre en accédant à Outils > Options > Cross Platform > Connection Manager.

  4. Fournissez les informations de connexion à votre ordinateur Linux et choisissez Se connecter. Visual Studio ajoute cette machine à CMakeSettings.json comme connexion par défaut pour Linux-Debug. Il extrait également les en-têtes de votre ordinateur distant, de sorte que vous obtenez IntelliSense spécifique à cette connexion distante. Ensuite, Visual Studio envoie vos fichiers à l’ordinateur distant et génère le cache CMake sur le système distant. Ces étapes peuvent prendre un certain temps, en fonction de la vitesse de votre réseau et de la puissance de votre ordinateur distant. Vous savez qu’il est terminé lorsque le message « Extraction d’informations cibles terminée » s’affiche dans la fenêtre de sortie CMake.

Définir un point d’arrêt, générer et exécuter sur Linux

Étant donné qu'il s'agit d'une application de bureau, vous devez ajouter des informations supplémentaires à la configuration de débogage.

  1. Dans la vue des cibles de CMake, cliquez avec le bouton droit sur AppBasicExampleGui et choisissez Paramètres de débogage et de lancement pour ouvrir le fichier launch.vs.json qui se trouve dans le sous-dossier masqué .vs. Ce fichier est local dans votre environnement de développement. Vous pouvez le déplacer à la racine de votre projet si vous souhaitez le vérifier et le partager avec votre équipe. Dans ce fichier, une configuration a été ajoutée pour AppBasicExampleGui. Ces paramètres par défaut fonctionnent dans la plupart des cas, mais pas ici. Étant donné qu’il s’agit d’une application de bureau, vous devez fournir des informations supplémentaires pour lancer le programme afin de pouvoir le voir sur votre ordinateur Linux.

  2. Pour rechercher la valeur de la variable DISPLAY d’environnement sur votre machine Linux, exécutez cette commande :

    echo $DISPLAY
    

    Dans la configuration d’AppBasicExampleGui, il existe un tableau de paramètres , « pipeArgs ». Il contient une ligne : « ${debuggerCommand} ». Il s’agit de la commande qui démarre gdb sur l’ordinateur distant. Visual Studio doit exporter l’affichage dans ce contexte avant l’exécution de cette commande. Par exemple, si la valeur de votre affichage est :1, modifiez cette ligne comme suit :

    "export DISPLAY=:1;${debuggerCommand}",
    
  3. Lancez et déboguez votre application. Ouvrez la liste déroulante Sélectionner l’élément de démarrage dans la barre d’outils et choisissez AppBasicExampleGui. Ensuite, veuillez sélectionner l'icône verte de lecture dans la barre d'outils ou appuyer sur la touche F5. L’application et ses dépendances sont basées sur l’ordinateur Linux distant, puis lancées avec le débogueur Visual Studio attaché. Sur votre ordinateur Linux distant, une fenêtre d’application doit s’afficher.

  4. Déplacez votre souris dans la fenêtre de l’application, puis cliquez sur un bouton. Le point d'arrêt est atteint. L’exécution du programme s’interrompt, Visual Studio revient au premier plan et vous voyez votre point d’arrêt. Vous devez également voir apparaître une fenêtre de console Linux dans Visual Studio. La fenêtre affiche les informations provenant de la machine Linux distante et peut également accepter des entrées pour stdin. Comme n’importe quelle fenêtre Visual Studio, vous pouvez l’ancrer là où vous préférez la voir. Sa position est conservée lors des sessions suivantes.

    Capture d’écran de la fenêtre console Linux de Visual Studio.

    La sortie dans la fenêtre indique que les fonctions C11 chargées dynamiquement à l’aide de dlopen/dlsym sont OK, un contexte GL 3.0 a été créé et le contexte de rendu Direct GLX obtenu et rendu actuel. La fenêtre contient diverses informations de version pour GL_VENDOR, GL_VERSION, GL_SHADING_LANGUAGE_VERSION, et ainsi de suite.

  5. Vous pouvez inspecter les variables d’application, les objets, les threads, la mémoire et parcourir votre code de manière interactive à l’aide de Visual Studio. Mais cette fois, vous effectuez tout sur un ordinateur Linux distant au lieu de votre environnement Windows local. Vous pouvez choisir Continuer de laisser l’application reprendre et quitter normalement, ou vous pouvez choisir le bouton Arrêter, comme avec l’exécution locale.

  6. Si vous examinez la fenêtre Pile des appels, vous voyez les appels à x11OpenGLWindow puisque Visual Studio a lancé l’application sur Linux.

    La fenêtre Visual Studio Call Stack, affichant la pile d'appels Linux.

    La pile d'appels affiche le point d'arrêt sur CommonRigidBodyBase::mouseMoveCallback, ainsi que les appels qui le précèdent, tels que OnMouseMove, X11OpenGLWindow::pumpMessage, etc.

Ce que vous avez appris

Dans ce tutoriel, vous avez cloné une base de code directement à partir de GitHub. Vous avez généré, exécuté et débogué cela sur Windows sans modification. Ensuite, vous avez utilisé la même base de code, avec des modifications de configuration mineures, pour générer, exécuter et déboguer sur une machine Linux distante.

Étapes suivantes

En savoir plus sur la configuration et le débogage de projets CMake dans Visual Studio :