Программирование ARM VSCode: использование файла настроек c_cpp_properties.json Sat, December 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


VSCode: использование файла настроек c_cpp_properties.json Печать
Добавил(а) microsin   

В этой статье (перевод документации [1]) объясняется схема файла настроек c_cpp_properties.json. Для дополнительной информации по этим настройкам см. описание кастомизации настроек по умолчанию [3] и конфигурирование IntelliSense для кросс-компиляции [4].

Пример файла c_cpp_properties.json:

{
  "env": {
    "myDefaultIncludePath": ["${workspaceFolder}", "${workspaceFolder}/include"],
    "myCompilerPath": "/usr/local/bin/gcc-7"
  },
  "configurations": [
    {
      "name": "Mac",
      "intelliSenseMode": "clang-x64",
      "includePath": ["${myDefaultIncludePath}", "/another/path"],
      "macFrameworkPath": ["/System/Library/Frameworks"],
      "defines": ["FOO", "BAR=100"],
      "forcedInclude": ["${workspaceFolder}/include/config.h"],
      "compilerPath": "/usr/bin/clang",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "compileCommands": "/path/to/compile_commands.json",
      "browse": {
        "path": ["${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
}

[Свойства верхнего уровня]

env Массив определяемых пользователем переменных, которые будут доступны для подстановки в конфигурациях через стандартный синтаксис переменных окружения: ${< var>} или ${env:< var>}. Принимаются строки и массивы строк.

configurations Массив объектов конфигурации, которые предоставляют для системы IntelliSense информацию о вашем проекте и о ваших предпочтениях. По умолчанию расширение создает для вас конфигурацию на основе вашей операционной системы. Вы можете также добавить дополнительные конфигурации.

version Это поле редактировать не рекомендуется. Оно отслеживает версию файла c_cpp_properties.json, чтобы расширение знало, какие свойства и настройки должны присутствовать, и как обновить этот файл до последней версии.

[Свойства конфигурации]

name Понятное имя, идентифицирующее конфигурацию. Значения "Linux", "Mac" и "Win32" это специальные идентификаторы для конфигураций, которые будут автоматически выбраны на соответствующих платформах. Строка состояния в правом нижнем углу окна VS Code покажет, какая из конфигураций активна. Вы можете кликнуть на этой метке в строек состояния, чтобы поменять активную конфигурацию.

compilerPath (опционально) Полный путь до компилятора, используемого для сборки вашего проекта, например /usr/bin/gcc, чтобы IntelliSense была более точной. Расширение будет анализировать компилятор, чтобы определить системные пути подключения заголовков (system include path) и определения по умолчанию для использования IntelliSense.

Если установить "compilerPath": "" (пустая строка), то опрос компилятора пропускается. Это полезно, если указанный компилятор не поддерживает аргументы, используемые для опроса, поскольку расширение будет по умолчанию возвращено любому компилятору, который оно сможет найти (наподобие Visual C). Если опустить свойство compilerPath, то опрос компилятора не пропускается.

compilerArgs (опционально) Аргументы компилятора для модификации используемых подключений заголовков или определений, например -nostdinc++, -m32, и т. д.

intelliSenseMode Режим для IntelliSense, который используется для сопоставления со специфичным для архитектуры вариантом MSVC, gcc или Clang. Если не установить это свойство, если оно установлено в ${default}, то расширение выберет значение по умолчанию для этой платформы.

Платформенные умолчания:

Windows: msvc-x64
Linux: gcc-x64
macOS: clang-x64

includePath Путь для подключения это папка, где содержатся файлы хедеров, которые компилятор ищет по директивам препроцессора (типа #include "myHeaderFile.h" в исходном коде). Укажите список путей для системы IntelliSense, которые она будет использовать при поиске подключаемых файлов заголовков. Поиск по этим путям не рекурсивный. Указание ** задает рекурсивный поиск. Например ${workspaceFolder}/** укажет искать заголовки во всех подкаталогах независимо от того, содержит ли ${workspaceFolder} их, или нет. Если на Windows установлена Visual Studio, или если указан компилятор в настройке compilerPath, то нет необходимости перечислять системные пути поиска заголовков в этом списке.

defines Список определений препроцессора для системы IntelliSense, чтобы она их использовала при парсинге файлов. Опционально используйте = для установки значения, например VERSION=1.

cStandard Версия стандарта языка C, которую будет использовать IntelliSense.

cppStandard Версия стандарта языка C++, которую будет использовать IntelliSense.

configurationProvider ID расширения VS Code, которое может предоставить для исходных файлов информацию о конфигурации IntelliSense. Например, используйте ID расширения VS Code ms-vscode.cmake-tools, чтобы предоставить информацию конфигурации из расширения CMake Tools. Если вы указали configurationProvider, то предоставленные конфигурации будут иметь приоритет над другими вашими настройками в c_cpp_properties.json.

Кандидат расширения configurationProvider должен реализовать vscode-cpptools-api.

windowsSdkVersion Версии путей подключения Windows SDK для использования на Windows, например 10.0.17134.0.

macFrameworkPath Список путей для системы IntelliSense, чтобы она их использовала при поиске подключаемых заголовков из фреймворков Mac. Поддерживается только в конфигурациях для macOS.

forcedInclude (опционально) Список файлов, которые должны быть подключены перед любыми другими символами в обрабатываемом исходном файле. Файлы подключается в порядке перечисления.

compileCommands (опционально) Полный путь до файла compile_commands.json для рабочего пространства. Пути подключения и определения, раскрытые в этом файле, будут использоваться вместо значений, установленных для настроек includePath и defines. Если база данных команд не содержит запись для элемента трансляции, который соответствует файлу, открытому в редакторе, то появится предупреждающее сообщение, и расширение будет использовать вместо compileCommands настройки includePath и defines.

Для дополнительной информации по формату файла compile_commands.json см. документацию [5]. Некоторые системы сборки, такие как CMake, просто генерируют этот файл.

browse Набор свойств, используемых в случае, когда "C_Cpp.intelliSenseEngine" установлено в "Tag Parser" (что известно как "fuzzy" IntelliSense, или подсистема "browse"). Эти свойства также используются Go для фич Definition/Declaration features, или когда "default" IntelliSense не может разрешить директивы #include в ваших файлах исходного кода.

Свойства browse:

path Список путей для Tag Parser, чтобы искать подключаемые в ваших исходниках заголовки. Если свойство path опущено, то в качестве path будет использоваться includePath. Поиск по этим путям по умолчанию рекурсивный. Укажите * для нерекурсивного поиска. Например ${workspaceFolder} будет задавать поиск по всем подкаталогам, а ${workspaceFolder}/* нет.

limitSymbolsToIncludedHeaders Когда true, Tag Parser будет только парсить код файлов, которые были прямо или косвенно подключены исходным кодом в ${workspaceFolder}. Когда false, Tag Parser будет парсить все файлы кода, найденные в путях списка browse.path.

databaseFilename Путь до сгенерированной базы данных символов. Это свойство инструктирует расширение сохранить базу данных символов Tag Parser-а где-нибудь в другом месте, отличающемся от хранилища по умолчанию рабочего пространства. Если указан относительный путь, то он будет сделан рекурсивным для хранилища по умолчанию рабочего пространства, но не самой папки рабочего пространства. Переменная ${workspaceFolder} может использоваться для указания пути относительно папки рабочего пространства (например ${workspaceFolder}/.vscode/browse.vc.db).

Поддерживаемые переменные. Вы можете разрешить tasks.json или launch.json опрашивать текущую активную конфигурацию из c_cpp_properties.json. Чтобы это сделать, используйте переменную ${command:cpptools.activeConfigName} в качестве аргумента в скрипте tasks.json или launch.json.

[Примеры файлов настроек]

Файл c_cpp_properties.json для проекта на чипе GX8002:

{
  "env": {
    "myDefaultIncludePath": ["${workspaceFolder}", "${workspaceFolder}/include"],
    "myCompilerPath": "/usr/bin"
  },
  "configurations": [
    {
      "name": "Linux",
      "intelliSenseMode": "clang-x64",
      "includePath": ["${myDefaultIncludePath}",
                      "${workspaceFolder}/include/utility/libc",
                      "${workspaceFolder}/lvp",
                      "${workspaceFolder}/lvp/vui/kws",
                      "${workspaceFolder}/lvp/common",
                      "${workspaceFolder}/lvp/app_core",
                      "${workspaceFolder}/include",
                      "${workspaceFolder}/include/utility",
                      "${workspaceFolder}/include/driver",
                      "${workspaceFolder}/lvp/vui/kws/models/marvin/v0.1.0/",
                      "${workspaceFolder}/boards/nationalchip/grus_gx8002b_dev_1v/include",
                      "~/National/csky-elfabiv2-tools/lib/gcc/csky-elfabiv2/6.3.0/include",
                      "~/National/230907SDK/vsp_sdk/mcu/vsp/common",
                      "${workspaceFolder}/arch/soc/grus/include"
                     ],
      "defines": ["FOO", "BAR=100"],
      "forcedInclude": ["${workspaceFolder}/.config"],
      "compilerPath": "/usr/bin",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "compileCommands": "/path/to/compile_commands.json",
      "browse": {
        "path": ["${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
} 

Файл c_cpp_properties.json для проекта на чипе GX8008C:

{
  "env": {
    "myDefaultIncludePath": ["${workspaceFolder}", "${workspaceFolder}/include"],
    "myCompilerPath": "/usr/bin"
  },
  "configurations": [
    {
      "name": "Linux",
      "intelliSenseMode": "clang-x64",
      "includePath": ["${myDefaultIncludePath}",
                      "${workspaceFolder}/mcu/base/include",
                      "${workspaceFolder}/mcu/include",
                      "${workspaceFolder}/mcu/vsp/hook",
                      "${workspaceFolder}/mcu/vsp/common",
                      "~/National/csky-elfabiv2-tools/lib/gcc/csky-elfabiv2/6.3.0/include",
                      "~/National/230907SDK/vsp_sdk/mcu/3rdparty/OneButton",
                      "~/National/230907SDK/vsp_sdk/mcu/3rdparty/fwupdater",
                      "~/National/230907SDK/vsp_sdk/mcu/3rdparty/picoUART"],
      "defines": ["FOO", "BAR=100"],
      "forcedInclude": ["${workspaceFolder}/.config"],
      "compilerPath": "/usr/bin",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "compileCommands": "/path/to/compile_commands.json",
      "browse": {
        "path": ["${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
} 

Файл c_cpp_properties.json для проекта на чипе BL602:

{
  "env": {
    "BL602_SDKpath": "~/Bouffalo/bl_iot_sdk",
    "myDefaultIncludePath": ["${workspaceFolder}",
                             "${workspaceFolder}/src"],
    "myCompilerPath": "/usr/bin"
  },
  "configurations": [
    {
      "name": "Linux",
      "intelliSenseMode": "clang-x64",
      "includePath": ["${myDefaultIncludePath}",
                      "${BL602_SDKpath}/toolchain/riscv/Linux/riscv64-unknown-elf/include",
                      "${BL602_SDKpath}/toolchain/riscv/Linux/lib/gcc/riscv64-unknown-elf/10.2.0/include",
                      "${BL602_SDKpath}/components/platform/soc/bl602/freertos_riscv_ram/config",
                      "${BL602_SDKpath}/components/network/ble/blestack/src/cli_cmds",
                      "${BL602_SDKpath}/components/network/ble/blestack/src/include/bluetooth",
                      "${BL602_SDKpath}/components/fs/vfs/include",
                      "${BL602_SDKpath}/components/stage/yloop/include",
                      "${BL602_SDKpath}/components/stage/easyflash4/inc",
                      "${BL602_SDKpath}/components/platform/hosal/bl602_hal",
                      "${BL602_SDKpath}/components/platform/hosal/include",
                      "${BL602_SDKpath}/components/platform/soc/bl602/bl602_std/bl602_std/StdDriver/Inc",
                      "${BL602_SDKpath}/components/utils/include",
                      "${BL602_SDKpath}/components/network/wifi_manager/bl60x_wifi_driver/include",
                      "${BL602_SDKpath}/components/network/ble/blestack/src/include/drivers/bluetooth",
                      "${BL602_SDKpath}/components/network/ble/blecontroller/ble_inc",
                      "${BL602_SDKpath}/components/network/ble/blestack/src/include/bluetooth",
                      "${BL602_SDKpath}/components/network/ble/blestack/src/host",
                      "${workspaceFolder}/src/spotter_utils",
                      "~/National/230907SDK/vsp_sdk/mcu/vsp/common"],
      "defines": ["FOO", "BAR=100"],
      "forcedInclude": ["${workspaceFolder}/.config"],
      "compilerPath": "/usr/bin",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "compileCommands": "/path/to/compile_commands.json",
      "browse": {
        "path": ["${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      }
    }
  ],
  "version": 4
} 

[Ссылки]

1. VSCode c_cpp_properties.json reference site:code.visualstudio.com.
2. VSCode FAQ.
3. Customizing default settings site:code.visualstudio.com.
4. IntelliSense for cross-compiling site:code.visualstudio.com.
5. Clang JSON COMPILATION DATABASE FORMAT SPECIFICATION site:clang.llvm.org.
6. espressif / vscode-esp-idf-extension site:github.com.
7VScode: как добавить путь поиска подключаемых файлов.
8. Интерфейс командной строки Visual Studio Code.

 

Добавить комментарий


Защитный код
Обновить

Top of Page