Tutoriel : Créer des projets multiplateformes C++ dans Visual Studio
Le développement en C et C++ dans Visual Studio ne cible plus seulement les environnements 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 qui contient 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 un exécutable cible sur Windows
- Ajouter une connexion à une machine Linux
- Générer et déboguer la même cible sur Linux
Prérequis
Configurer Visual Studio pour le développement multiplateforme en C++
- 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 multiplateforme en C++
Visual Studio ne nécessite pas de distribution particulière 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
,rsync
make
etzip
. 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 fournit 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 de CMake à partir de la duplication (fork) Microsoft dans le dépôt 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 d’exécution du script en spécifiant
--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 machine 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
Dans le menu principal de Visual Studio, choisissez Ouvrir un fichier > > CMake. Accédez au
CMakeLists.txt
fichier à la racine du dépôt bullet3 que vous avez téléchargé.Dès que vous ouvrez le dossier, votre structure de dossiers devient visible dans le Explorateur de solutions.
Cette vue montre le contenu réel du disque ; ce n’est pas une vue logique ou filtrée. Par défaut, elle n’affiche pas les fichiers masqués.
Choisissez le bouton Afficher tous les fichiers pour afficher tous les fichiers du dossier.
Basculer vers une vue des cibles
Quand vous ouvrez un dossier qui utilise CMake, Visual Studio génère automatiquement le cache CMake. Cette opération peut prendre plus ou moins de temps selon la taille de votre projet.
Dans la fenêtre Sortie, sélectionnez Afficher la sortie à partir de, puis choisissez CMake pour superviser 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 ».
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.
Utilisez le bouton Solutions et dossiers dans l’Explorateur de solutions pour passer à la vue des cibles de CMake.
Voici à quoi ressemble cette vue pour le Kit de développement logiciel (SDK) Bullet :
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 alors que d’autres sont des exécutables.
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 x64-Debug explicite pour Windows
Visual Studio crée une configuration x64-Debug par défaut pour Windows. Les configurations indiquent à Visual Studio quelle plateforme cible 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é CMake Paramètres.json. Il est rempli avec les paramètres de toutes les configurations que vous spécifiez.
Ajoutez une nouvelle configuration. Ouvrez la liste déroulante Configuration dans la barre d’outils et sélectionnez Gérer les configurations.
L’éditeur de Paramètres CMake s’ouvre. Sélectionnez l’authentification verte plus sur le côté gauche de l’éditeur pour ajouter une nouvelle configuration. La boîte de dialogue Ajouter une configuration à CMake Paramètres s’affiche :
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 CMake Paramètres.json avec une configuration pour x64-Debug et l’enregistre sur le disque. Vous pouvez utiliser un nom de votre choix pour vos configurations en changeant 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.
Dans l’Explorateur de solutions, sélectionnez AppBasicExampleGui et développez-le.
Ouvrez le fichier
BasicExample.cpp
.Définissez un point d’arrêt qui est atteint lorsque vous cliquez dans l’application en cours d’exécution. L’événement de clic est géré dans une méthode au sein d’une classe d’assistance. Pour y accéder rapidement :
Sélectionnez
CommonRigidBodyBase
que le structBasicExample
est dérivé de. C’est autour de la ligne 30.Cliquez avec le bouton droit et choisissez Atteindre la définition. Vous êtes maintenant dans l’en-tête CommonRigidBodyBase.h.
Dans l’affichage du navigateur au-dessus de votre source, vous devez voir que vous êtes dans le
CommonRigidBodyBase
. À droite, vous pouvez sélectionner les membres à examiner. Ouvrez la liste déroulante et sélectionnezmouseButtonCallback
cette option pour accéder à la définition de cette fonction dans l’en-tête.
Ajoutez un point d’arrêt sur la première ligne dans cette fonction. Il est atteint lorsque vous cliquez sur un bouton de la souris dans la fenêtre de l’application, lorsqu’il est exécuté sous le débogueur Visual Studio.
Pour lancer l’application, sélectionnez la liste déroulante de lancement dans la barre d’outils. Il s’agit de l’icône de lecture verte qui indique « Sélectionner l’élément de démarrage ». Dans la liste déroulante, sélectionnez AppBasicExampleGui.exe. Le nom de l’exécutable figure maintenant sur le bouton de lancement :
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 exécutée apparaît :
Déplacez votre souris dans la fenêtre d’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 à la machine distante
Ajoutez une configuration Linux. Cliquez avec le bouton droit sur le fichier CMakeSettings.json dans la vue de l’Explorateur de solutions, puis sélectionnez Ajouter une configuration. Comme précédemment, la boîte de dialogue Ajouter la configuration à CMakeSettings s’affiche. Sélectionnez Linux-Debug cette fois, puis enregistrez le fichier CMake Paramètres.json (ctrl+ s).
Visual Studio 2019 version 16.6 ou ultérieure Faites défiler vers le bas 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 CMake Paramètres.json (ctrl + s).
Sélectionnez Linux-Debug dans la liste déroulante de configuration.
Si c’est la première fois que vous vous connectez à un système Linux, la boîte de dialogue Connecter au système distant s’affiche.
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 à Tools > Options > Cross Platform > Connecter ion Manager.
Fournissez les informations de connexion à votre machine Linux et choisissez Connecter. Visual Studio ajoute cette machine à CMake Paramètres.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 fournir des informations de configuration supplémentaires à la configuration de débogage.
Dans la vue Cibles CMake, cliquez avec le bouton droit sur AppBasicExampleGui, puis choisissez Déboguer et Lancer Paramètres pour ouvrir le fichier launch.vs.json qui se trouve dans le sous-dossier .vs masqué. Ce fichier est propre à votre environnement de développement local. 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.
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}",
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, choisissez l’icône de lecture verte dans la barre d’outils ou appuyez sur 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 machine Linux distante, vous devez voir apparaître une fenêtre d’application.
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 une fenêtre de console Linux s’ouvrir dans Visual Studio. La fenêtre fournit la sortie de la machine Linux distante et peut également accepter l’entrée 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 dans les prochaines sessions.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.
Vous pouvez alors inspecter les variables, les objets, les threads et la mémoire de l’application, et exécuter votre code pas à pas 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.
Si vous examinez la fenêtre Pile des appels, vous voyez les appels à
x11OpenGLWindow
puisque Visual Studio a lancé l’application sur Linux.La pile d’appels affiche le point d’arrêt sur CommonRigidBodyBase ::mouseMoveCallback, et les appels qui précèdent celui-ci comme OnMouseMove, X11OpenGLWindow ::p umpMessage, 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é 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
Consultez les rubriques suivantes pour en savoir plus sur la configuration et le débogage des projets CMake dans Visual Studio :
Projets CMake dans Visual Studio
Configurer un projet CMake Linux
Se connecter à un ordinateur Linux distant
Personnaliser les paramètres de génération CMake
Configurer des sessions de débogage CMake
Déployer, exécuter et déboguer un projet Linux
Référence de configurationprédéfinie CMake vcpkg dans les projetsCMake Installer et utiliser des packages avec CMake dans Visual Studio