Поделиться через


Ссылка 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

В редакторе кода доступные параметры отображаются при начале ввода:

Снимок экрана: всплывающее окно IntelliSense в редакторе.

В этом списке показаны поддерживаемые значения:

  • 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 "не удается открытый код файл...".