vscode "#include ошибки обнаружены. Пожалуйста, обновите ваш includePath
Я пытаюсь использовать vscode с Arduino, но безуспешно. Проблема, кажется, что-то с путем библиотек. Но я не смог это исправить! Я на Linux.
"message": "#include errors detected. Please update your includePath. IntelliSense features for this translation unit (/home/harold/Arduino/Saaf_Curing/Saaf_Curing.ino) will be provided by the Tag Parser.",
Я не знаю, как найти мой includePath. Я не могу делать какие-либо советы, данные в vscode.
Интересно, правильное ли направление кода против, как это кажется сложным?
9 ответов
Хотя в вопросе упоминается Arduino, следующие предложения применимы практически каждый раз, когда VSCode говорит вам "обновить includePath".
Что такое includePath?
В includePath
это атрибут в c_cpp_settings.json
, который находится в .vscode
папка основной папки, которую вы открыли в VSCode, используя File → Open Folder.
Вы можете редактировать c_cpp_settings.json
напрямую, но обычно проще использовать "Графический интерфейс конфигураций C/C++". Для этого откройте палитру команд (Ctrl+Shift+P) и запустите "C/C++: Edit Configurations (UI)". Затем найдите параметр "Включить путь".
В includePath
сообщает VSCode (в частности, компоненту IntelliSense расширения C/C++), где искать при разрешении#include "filename"
директивы. Это позволяет VSCode видеть определения символов, определенных в этих файлах.
Так должен ли я возиться с includePath, когда VSCode говорит мне об этом?
Не сначала! Перед изменением пути включения, если вы еще этого не сделали, сначала установите "Путь к компилятору" так, чтобы он указывал на ваш компилятор C/C++, и установите "Режим IntelliSense", чтобы он соответствовал компилятору как можно точнее.
Вам также может потребоваться настроить аргументы компилятора, особенно если компилятор может генерировать код для нескольких целей, например, как 32-разрядный, так и 64-разрядный код. (Если вы не знаете, что это значит, сначала пропустите это.)
Затем в палитре команд запустите "C/C++: журнал диагностики". Выходные данные покажут вам, какой компилятор обнаружил VSCode и что он обнаружил в качестве встроенного пути включения и определения препроцессора.
Затем запустите эти команды в оболочке:
$ touch empty.c
$ gcc -v -E -dD empty.c
Здесь я предположил, что вы используете gcc
в качестве вашего компилятора. Если нет, замените фактическое имя команды компилятора. Если ваш компилятор не является вариантом GCC (например, вы используете Microsoftcl.exe
компилятор), вам нужно будет посмотреть его документацию или Google, чтобы найти переключатели, которые печатают предопределенные макросы и включают пути (например, см. здесь дляcl.exe
).
Сравните вывод вышеуказанной команды с тем, что VSCode показывает в выводе диагностики C/C++. Надеюсь, они очень похожи. Если нет, попробуйте настроить путь компилятора, режим IntelliSense или аргументы компилятора. Как только вы подобрали их как можно ближе, изменив только эти три параметра, переходите к следующему шагу.
Теперь при необходимости отрегулируйте includePath
Если все еще есть существенные различия между встроенной конфигурацией компилятора и тем, что обнаруживает VSCode, исправьте это (в пользовательском интерфейсе настроек C/C++), изменив стандартные поля Include path, Defines и C/C++. Повторно запустите команду C/C++ Log Diagnostics, чтобы увидеть результаты.
Вероятно, нет необходимости добавлять все заранее определенные символы препроцессора. Это действительно имеет значение, только если есть #ifdef
директивы, которые зависят от них, и которые заставляют VSCode видеть неправильный код как активный. Я предлагаю добавлять только предопределенные символы, если при просмотре кода вы видите конкретный случай, когда VSCode ошибается.
Наконец, если в вашем проекте есть файлы заголовков в местах, которые компилятор не выполняет поиск по умолчанию, то есть обычно вам нужно передать -I
включите командную строку компилятора, добавьте их также в путь включения. То же самое касается любого -D
аргументы, которые необходимо добавить в Defines.
Это связано с тем, что при инициализации в расширении отсутствует некоторый includepath
добавьте недостающие строки в ваш c_cpp_properties.json
"includePath": [
"<arduino ide installation folder>\\tools\\**",
"<arduino ide installation folder>\\hardware\\arduino\\avr\\**",
"<arduino ide installation folder>\\hardware\\tools\\**",
"<arduino ide installation folder>\\hardware\\arduino\\avr\\cores\\arduino"
]
Также добавьте "defines": [ "USBCON" ]
в "конфигурации", чтобы заставить класс Serial работать с intellisense
Попробуйте использовать расширение platformIO, оно облегчит вашу жизнь. Лично я использую VScode с platformIO для своих проектов Arduino и ESP32.
Для тех, кто использует WSL, это распространенная ошибка, которая решается следующим образом:
- установка
Remote-WSL
Расширение VS-кода - параметр
c_cpp_properties.json
includePath
к["${workspaceFolder}/**"]
а такжеintelliSenseMode
к"linux-clang-x64"
(или другой режим IntelliSense) - закройте VS-Code и снова откройте его с терминала WSL, вы увидите значок строки состояния, как на скриншоте .
Сейчас
#include
ошибка должна исчезнуть
Для получения дополнительной информации перейдите по ссылке
Я только что успешно потратил час на поиск решения этой проблемы с переполнением стека, но все напрасно, и теперь я нашел решение, которое, если вы используете Linux, просто нужно установить компилятор g++ с вашего терминала,
sudo apt установить g++
"и тебе хорошо.
Эта проблема связана с расширением C/C++ Runner Extension. Расширение C/C++ Runner генерирует сеанс конфигурации через сеанс Arduino в «c_cpp_properties.json».
Решения:
- Отключите расширение C/C++ Runner Extension из рабочей области. (если расширение C/C++ Runner Extension установлено и включено в глобальном или рабочем пространстве). Никогда не включайте C/C++ Runner глобально.
- Перезагрузите vscode.
- Удалите «launch.json», «settings.json» и «c_cpp_properties.json» из папки .vscode.
- Перестройте конфигурацию IntelliSense, запустив «Ctrl+Alt+I».
После всех шагов выше:
Вы увидите сеанс конфигурации с именем «Arduino», отображаемый в «c_cpp_properties.json», и все ошибки #include.. больше не будут отображаться.
Вам необходимо перестраивать конфигурацию IntelliSense (запускать «Ctrl+Alt+I») каждый раз после добавления нового #include.
Мой код Arduino-Vscode: v0.6.230727001.
Мой C/C++: v1.19.1.
ОС: Кубунту 23.10.
Да, все являются предварительной версией.
У меня была та же проблема, и я часами пробовал разные решения, и, наконец, я понял, что у меня опечатка в «iostream». Это не ответ на этот вопрос, но если вы попали сюда с той же ошибкой, проверьте еще и орфографию.
В моем случае это было вызвано моимincludePath
настроен на{workspaceFolder}/**
и еще не создал рабочее пространство. Создайте рабочую область проекта с помощью «Сохранить рабочую область как», и тогда она должна работать.
Причина проблемы:
Мой компилятор C/C++ был сохранен как/use/bin/clang
и это показывало ошибку в моем компьютере.
Операционная система: Ubuntu 2022.04
Решения:
- Откройте свой VSCode и нажмите «Настройки» (обычно в левом нижнем углу).
- Теперь щелкните значок «Открыть настройки» (JSON) (в правом верхнем углу) и откройте
json
файл. - Добавьте ниже код между последней частью основного
{}
скобка [Если у вас нет скобки, создайте ее].
"C_Cpp.default.compilerPath": "/usr/bin/gcc",
"C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
Это решило мою проблему, и я думаю, что это решит проблему для любой ОС Linux/Unix.
В случае, если это не сработает, попробуйте:
"C_Cpp.default.compilerPath": "/usr/bin/g++",
"C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
Если у вас операционная система Windows, используйте путь к вашему компилятору GCC вместо/usr/bin/gcc
[это будет что-то вродеC:\MinGW\bin
].