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


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

Имя переменной Описание
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 доступны следующие среды выполнения.

Имя переменной Описание
linux_x86 Удаленная цель для Linux x86
linux_x64 Удаленное нацеливание на Linux x64
linux_arm Постановка на ARM Linux удаленно

Определяемые пользователем среды

При необходимости можно использовать свойство 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 и более ранних: При использовании среды необходимо указать её в свойстве, даже если среда определена как часть той же конфигурации. Свойство 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:

Макрос Описание
${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++>Дополнительно и включив параметр Включить ведение журналаtrue. Для начала задайте для параметра Уровень ведения журнала значение 5, а для параметра Фильтры ведения журнала — значение 8.

Снимок экрана: параметры ведения журнала диагностики в диалоговом окне

Выходные данные передаются в Окно вывода и отображаются при выборе "Показать выходные данные из журнала Visual C++". Выходные данные содержат, помимо прочего, список реальных путей подключения, которые IntelliSense пытается использовать. Если пути не совпадают с указанными в CppProperties.json, попробуйте закрыть папку и удалить подпапку .vs, содержащую кэшированные данные просмотра.

Чтобы устранить ошибки IntelliSense, вызванные отсутствием путей включения, откройте вкладку Список ошибок, а затем отфильтруйте его выходные данные на "только IntelliSense" и код ошибки E1696 "не удается открыть исходный файл...".