CppProperties.json
Référence
Ouvrez les projets dossier qui n’utilisent pas CMake peuvent stocker les paramètres de configuration de projet pour IntelliSense dans un CppProperties.json
fichier. (Les projets CMake utilisent un CMakeSettings.json
fichier.) Une configuration se compose de paires nom/valeur et définit #include chemins d’accès, commutateurs du compilateur et autres paramètres. Pour plus d’informations sur l’ajout de configurations dans un projet Open Folder, consultez Open Folder projects for C++. Les sections suivantes résument les différents paramètres. Pour obtenir une description complète du schéma, accédez à CppProperties_schema.json, dont le chemin d’accès complet est donné en haut de l’éditeur de code lorsqu’il CppProperties.json
est ouvert.
Propriétés de configuration
Une configuration peut avoir l’une des propriétés suivantes :
Nom | Description |
---|---|
inheritEnvironments |
Spécifie les environnements qui s’appliquent à cette configuration. |
name |
Nom de configuration qui s’affiche dans la liste déroulante de configuration C++ |
includePath |
Liste séparée par des virgules de dossiers qui doivent être spécifiés dans le chemin d’accès include (mappe à /I la plupart des compilateurs) |
defines |
Liste des macros à définir (mappée à /D la plupart des compilateurs) |
compilerSwitches |
Un ou plusieurs commutateurs supplémentaires pouvant influencer le comportement d’IntelliSense |
forcedInclude |
En-tête à inclure automatiquement dans chaque unité de compilation (mappée à /FI MSVC ou -include pour clang) |
undefines |
Liste des macros à non définies (mappées à /U MSVC) |
intelliSenseMode |
Moteur IntelliSense à utiliser Vous pouvez spécifier l’une des variantes spécifiques à l’architecture prédéfinies pour MSVC, gcc ou Clang. |
environments |
Les ensembles de variables définis par l’utilisateur qui se comportent comme des variables d’environnement dans une invite de commandes sont accessibles avec la ${env.VARIABLE} macro. |
Valeurs intelliSenseMode
L’éditeur de code affiche les options disponibles lorsque vous commencez à taper :
Cette liste affiche les valeurs prises en charge :
windows-msvc-x86
windows-msvc-x64
windows-msvc-arm
windows-msvc-arm64
android-clang-x86
android-clang-x64
android-clang-arm
android-clang-arm64
ios-clang-x86
ios-clang-x64
ios-clang-arm
ios-clang-arm64
windows-clang-x86
windows-clang-x64
windows-clang-arm
windows-clang-arm64
linux-gcc-x86
linux-gcc-x64
linux-gcc-arm
Remarque : Les valeurs msvc-x86
et msvc-x64
sont prises en charge uniquement pour des raisons héritées. Utilisez plutôt les windows-msvc-*
variantes.
Environnements prédéfinis
Visual Studio fournit les environnements prédéfinis suivants pour Microsoft C++ qui correspondent à l’invite de commandes développeur correspondante. Lorsque vous héritez de l’un de ces environnements, vous pouvez faire référence à l’une des variables d’environnement à l’aide de la propriété env
globale avec cette syntaxe de macro : ${env.VARIABLE}
.
Nom de la variable | Description |
---|---|
vsdev |
Environnement Visual Studio par défaut |
msvc_x86 |
Compiler pour x86 à l’aide d’outils x86 |
msvc_x64 |
Compiler pour AMD64 à l’aide d’outils 64 bits |
msvc_arm |
Compiler pour ARM à l’aide d’outils x86 |
msvc_arm64 |
Compiler pour ARM64 à l’aide d’outils x86 |
msvc_x86_x64 |
Compiler pour AMD64 à l’aide d’outils x86 |
msvc_arm_x64 |
Compiler pour ARM à l’aide d’outils 64 bits |
msvc_arm64_x64 |
Compiler pour ARM64 à l’aide d’outils 64 bits |
Quand la charge de travail Linux est installée, les environnements suivants sont disponibles pour cibler à distance Linux et WSL :
Nom de la variable | Description |
---|---|
linux_x86 |
Cibler Linux x86 à distance |
linux_x64 |
Cibler Linux x64 à distance |
linux_arm |
Cibler Linux ARM à distance |
Environnements définis par l’utilisateur
Vous pouvez éventuellement utiliser la environments
propriété pour définir des ensembles de variables dans le CppProperties.json
monde entier ou par configuration. Ces variables se comportent comme des variables d’environnement dans le contexte d’un projet Open Folder. Vous pouvez y accéder avec la ${env.VARIABLE}
syntaxe tasks.vs.json
et launch.vs.json
après leur définition. Toutefois, elles ne sont pas nécessairement définies en tant que variables d’environnement réelles dans une invite de commandes que Visual Studio utilise en interne.
Visual Studio 2019 version 16.4 et ultérieure : les variables spécifiques à la configuration définies dans CppProperties.json
sont automatiquement récupérées par les cibles et tâches de débogage sans avoir à définir inheritEnvironments
. Les cibles de débogage sont lancées automatiquement avec l’environnement que vous spécifiez dans CppProperties.json
.
Visual Studio 2019 version 16.3 et antérieure : lorsque vous utilisez un environnement, vous devez le spécifier dans la inheritsEnvironments
propriété même si l’environnement est défini dans le cadre de la même configuration ; la environment
propriété spécifie le nom de l’environnement. L’exemple suivant montre un exemple de configuration permettant d’activer IntelliSense pour GCC dans une installation MSYS2. Notez comment la configuration définit et hérite de l’environnement mingw_64
et comment la includePath
propriété peut accéder à la INCLUDE
variable.
"configurations": [
{
"inheritEnvironments": [
"mingw_64"
],
"name": "Mingw64",
"includePath ,": [
"${env.INCLUDE}",
"${workspaceRoot}\\**",
],
"intelliSenseMode": "linux-gcc-x64",
"environments": [
{
"MINGW64_ROOT": "C:\\msys64\\mingw64",
"BIN_ROOT": "${env.MINGW64_ROOT}\\bin",
"FLAVOR": "x86_64-w64-mingw32",
"TOOLSET_VERSION": "9.1.0",
"PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}",
"INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};",
"environment": "mingw_64"
}
]
}
]
Lorsque vous définissez une propriété à l’intérieur d’une "environments"
configuration, elle remplace toutes les variables globales qui ont les mêmes noms.
Macros intégrées
Vous avez accès aux macros intégrées suivantes à l’intérieur de CppProperties.json
:
Macro | Description |
---|---|
${workspaceRoot} |
Chemin d’accès complet au dossier de l’espace de travail |
${projectRoot} |
Chemin d’accès complet au dossier où CppProperties.json est placé |
${env.vsInstallDir} |
Chemin d’accès complet au dossier dans lequel l’instance en cours d’exécution de Visual Studio est installée |
Exemple
Si votre projet comporte un dossier Include et inclut *windows.h
également * et d’autres en-têtes courants du Kit de développement logiciel (SDK) Windows, vous pouvez mettre à jour votre CppProperties.json
fichier de configuration avec les éléments suivants :
{
"configurations": [
{
"name": "Windows",
"includePath": [
// local include folder
"${workspaceRoot}\\include",
// Windows SDK and CRT headers
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\ucrt",
"${env.NETFXSDKDir}\\include\\um",
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\um",
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\shared",
"${env.VCToolsInstallDir}\\include"
]
}
]
}
Remarque
%WindowsSdkDir%
et %VCToolsInstallDir%
ne sont pas définis en tant que variables d’environnement globales. Veillez à commencer devenv.exe
à partir d’une invite de commandes développeur qui définit ces variables. (Tapez « développeur » dans le menu Démarrer de Windows pour rechercher un raccourci d’invite de commandes développeur.)
Corriger les erreurs IntelliSense
Si vous ne voyez pas IntelliSense que vous attendez, vous pouvez résoudre les problèmes en accédant à l’Éditeur>de texte Options>outils>C/C++>Avancé et en définissant Activer la journalisation . true
Pour commencer, essayez de définir le niveau de journalisation sur 5 et les filtres de journalisation sur 8.
La sortie est redirigée vers la fenêtre Sortie et est visible lorsque vous choisissez Afficher la sortie à partir de : Journal Visual C++. La sortie contient, entre autres, la liste des chemins d’accès d’insertion réels que IntelliSense essaie d’utiliser. Si les chemins d’accès ne correspondent pas à ceux du CppProperties.json
dossier, essayez de fermer le dossier et de supprimer le .vs
sous-dossier qui contient des données de navigation mises en cache.
Pour résoudre les erreurs IntelliSense provoquées par des chemins d’accès manquants, ouvrez l’onglet Liste d’erreurs, puis filtrez sa sortie sur « IntelliSense uniquement » et le code d’erreur E1696 « ne peut pas code source ouvert fichier ... ».