Ссылка CppProperties.json
Открытие проектов папок, которые не используют CMake, могут хранить параметры конфигурации проекта для IntelliSense в CppProperties.json
файле. (Проекты CMake используют CMakeSettings.json
файл.) Конфигурация состоит из пар "имя-значение" и определяет #include пути, коммутаторы компилятора и другие параметры. Дополнительные сведения о добавлении конфигураций в проект "Открыть папку" см. в разделе "Открытие проектов папок" для C++. В следующих разделах приводятся общие сведения о различных параметрах. Для полного описания схемы перейдите к CppProperties_schema.json, полный путь которого указан в верхней части редактора кода при CppProperties.json
открытии.
Свойства конфигурации
Конфигурация может иметь любое из следующих свойств:
Имя | Описание |
---|---|
inheritEnvironments |
Указывает, какие среды применяются к этой конфигурации. |
name |
Имя конфигурации, которое будет отображаться в раскрывающемся списке конфигурации C++ |
includePath |
Разделенный запятыми список папок, которые должны быть указаны в пути включения (сопоставляются с /I большинством компиляторов). |
defines |
Список макросов, которые следует определить (сопоставляется с /D большинством компиляторов) |
compilerSwitches |
Один или несколько дополнительных параметров, которые могут повлиять на поведение IntelliSense |
forcedInclude |
Заголовок для автоматического включения в каждую единицу компиляции (сопоставляется с /FI MSVC или -include clang) |
undefines |
Список макросов, которые необходимо не определить (сопоставляется с /U MSVC) |
intelliSenseMode |
Используемая подсистема IntelliSense. Для MSVC, gcc или Clang можно указать один их предварительно заданных вариантов для конкретной архитектуры. |
environments |
Определяемые пользователем наборы переменных, которые ведут себя как переменные среды в командной строке и получают доступ к макросу ${env.VARIABLE} . |
Значения intelliSenseMode
В редакторе кода доступные параметры отображаются при начале ввода:
В этом списке показаны поддерживаемые значения:
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
Примечание. Значения msvc-x86
и msvc-x64
поддерживаются только по устаревшим причинам. Вместо этого используйте варианты windows-msvc-*
.
Предварительно заданные среды
Visual Studio предоставляет следующие стандартные среды для Microsoft C++, которые сопоставляются с соответствующей командной строкой разработчика. При наследовании одной из этих сред можно ссылаться на любые переменные среды с помощью глобального свойства env
с этим синтаксисом макросов: ${env.VARIABLE}
Имя переменной | Description |
---|---|
vsdev |
Среда Visual Studio по умолчанию |
msvc_x86 |
Компиляция для x86 с помощью средств x86 |
msvc_x64 |
Компиляция для AMD64 с помощью 64-разрядных средств |
msvc_arm |
Компиляция для ARM с помощью средств x86 |
msvc_arm64 |
Компиляция для ARM64 с помощью средств x86 |
msvc_x86_x64 |
Компиляция для AMD64 с помощью средств x86 |
msvc_arm_x64 |
Компиляция для ARM с помощью 64-разрядных средств |
msvc_arm64_x64 |
Компиляция для ARM64 с помощью 64-разрядных средств |
При установке рабочей нагрузки Linux для удаленной ориентации на Linux и WSL доступны следующие среды.
Имя переменной | Description |
---|---|
linux_x86 |
Удаленная ориентация на Linux x86 |
linux_x64 |
Удаленная ориентация на Linux x64 |
linux_arm |
Удаленная ориентация на Linux ARM |
Определяемые пользователем среды
При необходимости можно использовать environments
свойство для определения наборов переменных в CppProperties.json
глобальной или каждой конфигурации. Эти переменные ведут себя как переменные среды в контексте проекта Open Folder. Вы можете получить доступ к ним с помощью синтаксиса ${env.VARIABLE}
из tasks.vs.json
и launch.vs.json
после определения здесь. Однако они не обязательно задаются как фактические переменные среды в любой командной строке, которую Visual Studio использует внутренне.
Visual Studio 2019 версии 16.4 и более поздних версий: переменные, определенные CppProperties.json
в конфигурации, автоматически выбираются целевыми объектами отладки и задачами без необходимости задавать.inheritEnvironments
Целевые объекты отладки запускаются автоматически с указанной в CppProperties.json
ней средой.
Visual Studio 2019 версии 16.3 и более ранних версий: при использовании среды необходимо указать его в свойстве, даже если среда определена как inheritsEnvironments
часть той же конфигурации; environment
свойство указывает имя среды. Ниже приведен пример конфигурации для включения IntelliSense для GCC в установке MSYS2. Обратите внимание, что конфигурация определяет и наследует среду mingw_64
, а также то, как свойство includePath
может получить доступ к переменной INCLUDE
.
"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"
}
]
}
]
При определении "environments"
свойства внутри конфигурации он переопределяет все глобальные переменные с одинаковыми именами.
Встроенные макросы
Вам доступны следующие встроенные макросы внутри CppProperties.json
:
Макрос | Description |
---|---|
${workspaceRoot} |
полный путь к папке рабочей области; |
${projectRoot} |
Полный путь к папке, в которой CppProperties.json размещается |
${env.vsInstallDir} |
полный путь к папке, где установлен запущенный экземпляр Visual Studio. |
Пример
Если проект содержит папку include, а также включает *windows.h
* и другие распространенные заголовки из пакета SDK для Windows, может потребоваться обновить CppProperties.json
файл конфигурации следующим образом:
{
"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"
]
}
]
}
Примечание.
%WindowsSdkDir%
и %VCToolsInstallDir%
не задаются как глобальные переменные среды. Убедитесь, что вы начинаете работу devenv.exe
с командной строки разработчика, которая определяет эти переменные. (Введите "разработчик" в меню "Пуск" Windows, чтобы найти ярлык командной строки разработчика.)
Устранение ошибок IntelliSense
Если вы не видите intelliSense, которое вы ожидаете, вы можете устранить неполадки, перейдя в >текстовый редактор параметров>C>/C++>Advanced и установив параметр true
"Включить ведение журнала". Для начала задайте для параметра Уровень ведения журнала значение 5, а для параметра Фильтры ведения журнала — значение 8.
Выходные данные передаются в окно вывода и отображаются при выборе команды "Показать выходные данные из журнала Visual C++". Выходные данные содержат, помимо прочего, список фактических путей включения, которые IntelliSense пытается использовать. Если пути не соответствуют тем CppProperties.json
, попробуйте закрыть папку и удалить .vs
вложенную папку, содержащую кэшированные данные просмотра.
Чтобы устранить ошибки IntelliSense, вызванные отсутствием путей включения, откройте вкладку "Список ошибок", а затем отфильтруйте его выходные данные только в IntelliSense и код ошибки E1696 "не удается открытый код файл...".