Я пытаюсь использовать VScode для навигации по коду проекта с открытым исходным кодом SCIRun. Когда я просматриваю файлы проекта (.cpp
, .h
), я вижу следующее ошибки.
Несмотря на то, что заголовочный файл был "обнаружен" автодополнением (которое делается через движок Intelisense), я не могу открыть этот файл. Я пробовал много вещей, таких как
настройка параметра includePath
для многих комбинаций (с/без рекурсивного поиска) и других опций в IntelliSense Configurations
.
Мой файл c_cpp_properties.json
(с настройкой includePath
)
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/src/**"
],
"defines": [],
"configurationProvider": "ms-vscode.cmake-tools",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64",
"browse": {
"databaseFilename": "",
"path": [],
"limitSymbolsToIncludedHeaders": false
}
}
],
"version": 4
}
Я не уверен, почему это происходит.
Этот проект довольно сложен в реализации. Он использует CMake и множество «проектов CMake» со многими CMakeLists.txt
файлами и одним корневым CMake Superbuild.cmake
.
Упрощенное дерево проекта будет выглядеть так
.
├── appveyor.yml
├── (...)
├── compile_commands.json -> ./bin/SCIRun/compile_commands.json
├── src
│ ├── CMake
│ │ ├── Modules
│ │ │ ├── CPack.Distribution.dist.in
│ │ │ ├── (...)
│ ├── CMakeLists.txt
│ ├── Core
│ │ ├── Datatypes
│ │ │ ├── (...)
│ │ │ ├── MatrixAlgorithms.cc
│ │ │ ├── MatrixAlgorithms.h
│ │ │ ├── Matrix.cc
│ │ │ ├── MatrixComparison.h
│ │ │ ├── MatrixFwd.h
│ ├── Superbuild
│ └── windowsBuild.bat
├── Superbuild
│ ├── BoostConfig.cmake.in
│ ├── BoostExternal.cmake
│ ├── Cleaver2External.cmake
│ ├── CMakeLists.txt
│ ├── CtkExternal.cmake
│ ├── (...)
└── (...)
Я хочу просто иметь возможность чтения исходных файлов с легким доступом к файлам (заголовки и т.д.). Проверка синтаксиса на наличие ошибок также была бы полезна, но не настолько необходима.
Это не связано с языком C++: это чисто проблема VSCode (плохо настроенная) ... VSCode должен безупречно импортировать проект CMake, по крайней мере, он сделал это в последний раз, когда мне пришлось использовать этот инструмент. Я не думаю, что CMake тоже причастен к этой проблеме.
@Wisblade Да, вы, наверное, правы, я изменил теги
@AlanBirtles Хорошо, я попытался удалить этот файл, но возникла проблема. Я попытаюсь снова импортировать проект и снова все настроить.
Добавление ${workspaceFolder}/src/**
к includePath
устранило для меня большинство ошибок. Осталась одна ошибка для boost
, которую я сейчас пытаюсь установить с помощью vcpkg
.
@md2perpe Итак, вы добавили ${workspaceFolder}/src/**
к includePath
в файле .vscode/c_cpp_properties.json
? Изменили ли вы что-нибудь кроме этого в конфигурации проекта? Если вы изменили .vscode/c_cpp_properties.json
, не могли бы вы вставить его сюда?
@md2perpe Спасибо! Единственным отличием, которое я нашел, была строка "configurationProvider": "ms-vscode.cmake-tools"
, которая была в моем c_cpp_properties.json
, но отсутствует в вашем. После того, как я удалил, теперь он работает так, как я хотел!
Решено с помощью md2perpe.
Ошибка была вызвана неправильной настройкой .vscode/c_cpp_properties.json
, вот так
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/src/**",
"${workspaceFolder}/src/**",
"${workspaceFolder/**",
"${workspaceFolder}"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}
Строка "configurationProvider": "ms-vscode.cmake-tools"
вызывала проблему. Эти параметры позволяют расширениям VS Code предоставлять информацию о конфигурации IntelliSense для исходных файлов (документов)[https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference]. На данный момент я не уверен, поставил ли я это сам или это было сделано каким-то расширением.
Мой .vscode/c_cpp_properties.json
теперь выглядит так (см. также ссылку, предоставленную md2perpe).
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/src/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
если вы используете плагин cmake, вы должны просто позволить ему настроить IntelliSense и удалить ваш файл
c_cpp_properties.json