Partager via


Configurer un projet C++ pour IntelliSense

Dans certains cas, vous devrez peut-être configurer manuellement votre projet C++ pour qu’IntelliSense fonctionne correctement. Pour les projets MSBuild (basés sur des .vcxproj fichiers), vous pouvez ajuster les paramètres dans les propriétés du projet. Pour les projets non MSBuild, vous ajustez les paramètres dans le CppProperties.json fichier dans le répertoire racine du projet. Dans certains cas, vous devrez peut-être créer un fichier d’indicateur pour aider IntelliSense à comprendre les définitions de macro. L’IDE Visual Studio vous aide à identifier et à résoudre les problèmes IntelliSense.

IntelliSense à fichier unique

Lorsque vous ouvrez un fichier qui n’est pas inclus dans un projet, Visual Studio fournit une prise en charge IntelliSense, mais par défaut, aucune erreur n’est affichée. Si la barre de navigation affiche Divers fichiers, cela explique probablement pourquoi vous ne voyez pas les soulignements d'erreur sous le code incorrect, ou pourquoi une macro de préprocesseur n’est pas définie.

Vérifier la liste des erreurs

Si un fichier n’est pas ouvert en mode fichier unique et qu’IntelliSense ne fonctionne pas correctement, la première place à vérifier est la fenêtre Liste d’erreurs . Pour afficher toutes les erreurs IntelliSense pour le fichier source actuel avec tous les fichiers d’en-tête inclus, choisissez Build + IntelliSense dans la liste déroulante :

Capture d’écran de la fenêtre Liste d’erreurs. Build + IntelliSense est sélectionné dans la liste déroulante de filtre.

IntelliSense produit un maximum de 1 000 erreurs. Si plus de 1 000 erreurs sont présentes dans les fichiers d’en-tête inclus par un fichier source, alors le fichier source affiche uniquement un seul soulignement d'erreur au tout début du fichier source.

Vérifiez que les chemins d’accès #include sont corrects

Projets MSBuild

Si vous exécutez vos builds en dehors de l’IDE Visual Studio et que vos builds réussissent, mais IntelliSense est incorrect, il est possible que votre ligne de commande soit désynchronisée avec les paramètres du projet pour une ou plusieurs configurations. Cliquez avec le bouton droit sur le nœud du projet dans l’Explorateur de solutions et vérifiez que tous les chemins d’accès #include sont corrects pour la configuration et la plateforme actuelles. Si les chemins d’accès sont identiques dans toutes les configurations et plateformes, vous pouvez sélectionner Toutes les configurations et Toutes les plateformes, puis vérifier que les chemins sont corrects.

Capture d’écran montrant le paramètre Inclure des répertoires dans la section Propriétés de configuration.

Pour afficher les valeurs actuelles des macros de build telles que VC_IncludePath, sélectionnez la liste déroulante Inclure les répertoires . <Choisissez Ensuite Modifier> et sélectionnez le bouton Macros.

Projets Makefile

Pour les projets Makefile basés sur le modèle de projet NMake, choisissez NMake sous Propriétés de configuration, puis choisissez Inclure le chemin de recherche dans la catégorie IntelliSense :

Capture d’écran montrant le paramètre Propriétés > de configuration N Make > Include Search Path.

Projets CMake

Pour les projets CMake, assurez-vous que les chemins d’accès #include sont spécifiés correctement pour toutes les configurations dans CMakeLists.txt. D’autres types de projet peuvent nécessiter un CppProperties.json fichier. Pour plus d’informations, consultez Configurer la navigation dans le code avec CppProperties.json. Vérifiez que les chemins d’accès sont corrects pour chaque configuration définie dans le fichier.

En cas d’erreur de syntaxe dans le CppProperties.json fichier, IntelliSense dans les fichiers concernés est incorrect. Visual Studio affiche l’erreur dans la fenêtre sortie.

Problèmes liés à l’analyseur de balises

L’analyseur de balises est un analyseur C++ flou utilisé pour la navigation et la consultation. C’est rapide, mais ne tente pas de comprendre complètement chaque construction de code.

Par exemple, il n’évalue pas les macros de préprocesseur et peut donc analyser incorrectement du code qui les utilise fortement. Lorsque l’analyseur de balises rencontre une construction de code inconnue, il peut ignorer toute la région du code.

Il existe deux façons courantes de manifester ce problème dans Visual Studio :

  1. L’IDE propose de créer une définition de fonction pour une fonction déjà définie.

  2. Si la barre de navigation affiche une macro la plus interne, la définition de la fonction actuelle a été ignorée :

    Capture d’écran montrant l’analyseur d’étiquettes qui ignore la définition de la fonction.

    L’extrait de code montre une définition de macro pour do_if utilisée à l’intérieur de la fonction principale. L’analyseur de balises ne comprend pas la macro. Par conséquent, au lieu de la liste déroulante de navigation montrant que le nom de la fonction actuelle est principal, il affiche le nom de la macro : do_if.

Pour résoudre ces types de problèmes, ajoutez un fichier nommé cpp.hint à la racine de votre répertoire de solution. Pour plus d’informations, voir Fichiers hint.

Les erreurs de l’analyseur d’étiquettes s’affichent dans la fenêtre Liste d’erreurs.

Valider les paramètres du projet avec la journalisation des diagnostics

Pour vérifier si le compilateur IntelliSense utilise des options de compilateur correctes, notamment inclure des chemins d’accès et des macros de préprocesseur, activez la journalisation des diagnostics des lignes de commande IntelliSense.

  1. Ouvrez le volet OutilsOptions et développez Tous les paramètresLanguesC/C++IntelliSenseJournalisation des diagnostics.

  2. Cochez la case Journaliser les informations de diagnostic dans la fenêtre de sortie.

  3. Définissez la valeur de niveau de journalisation sur 5 (le plus détaillé).

  4. Définissez la valeur du filtre de journalisation sur 8 (journalisation IntelliSense).

  1. Ouvrez la boîte de dialogueOptions> et développez la section Éditeur> de texteC/C++>Avancé.

  2. Dans le groupe Journalisation des diagnostics , définissez l’option Activer la journalisation sur True.

  3. Définissez la valeur du Niveau de journalisation sur 5 (le plus détaillé).

  4. Définissez la valeur du filtre de journalisation sur 8 (journalisation IntelliSense).

  5. Cliquez sur OK.

La fenêtre sortie affiche désormais les lignes de commande transmises au compilateur IntelliSense. Voici un exemple de résultat :

[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h

Ces informations peuvent vous aider à comprendre pourquoi IntelliSense fournit des informations inexactes. Par exemple, si le répertoire Include de votre projet contient $(MyVariable)\Include, et que le journal de diagnostic s’affiche /I\Include sous la forme d’un chemin Include, cela signifie qu’il $(MyVariable) n’a pas été évalué et a été supprimé du chemin d’accès include final.

À propos du build IntelliSense

Visual Studio utilise un compilateur C++ dédié pour créer et gérer la base de données qui alimente toutes les fonctionnalités IntelliSense. Pour synchroniser la base de données IntelliSense avec le code, Visual Studio lance automatiquement des builds IntelliSense uniquement en tant que tâches en arrière-plan en réponse à certaines modifications apportées dans les paramètres du projet ou les fichiers sources.

Toutefois, dans certains cas, Visual Studio peut ne pas mettre à jour la base de données IntelliSense en temps voulu. Par exemple, lorsque vous exécutez une commande git pull ou une commande git checkout, Visual Studio peut prendre jusqu’à une heure pour détecter les modifications apportées aux fichiers. Vous pouvez forcer une nouvelle analyse de tous les fichiers d’une solution en cliquant avec le bouton droit sur le nœud du projet dans l’Explorateur de solutions et en choisissant Rescan Solution.

Dépanner les échecs de compilation IntelliSense

Une build IntelliSense ne produit pas de fichiers binaires, mais elle peut toujours échouer. L'une des causes possibles de l'échec est les fichiers personnalisés .props ou .targets. Dans Visual Studio 2017 version 15.6 et ultérieures, les erreurs uniquement liées à IntelliSense sont enregistrées dans la Fenêtre de Sortie. Pour les afficher, définissez Afficher la sortie de sur Solution :

Capture d'écran montrant la fenêtre Sortie. L'affichage de la sortie dans la liste déroulante est défini sur Solution.

Le message d’erreur peut vous demander d’activer le traçage au moment du design :

error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.

Si vous définissez la variable TRACEDESIGNTIME d’environnement sur true et redémarrez Visual Studio, vous voyez un fichier journal dans le %TEMP% répertoire, ce qui peut vous aider à diagnostiquer l’échec de génération.

Pour en savoir plus sur TRACEDESIGNTIME la variable d’environnement, consultez Roslyn et les compilations à la conception. Les informations contenues dans ces articles sont pertinentes pour les projets C++.