Есть ли в clangd опция includePath?
Раньше я работал с расширением VSCode C / C++. в этом расширении (в файле json) была функция, называемая "includePath", с помощью которой я мог устанавливать пути для моих заголовков, поэтому без выполнения CMake или make я бы получил предложение о моих заголовках и завершении кода из этих.
теперь я переключился на neovim и clangd в качестве языкового сервера для завершения кода. Я много искал, чтобы найти соответствующую функцию в параметрах clangd, но не смог найти ничего, кроме этой ссылки.
поскольку clangd - мощный языковой сервер, мне интересно, нет ли в нем такой функции. поэтому я хочу знать, есть ли такая функция в clangd? и если ДА, как я могу это использовать?
Примечание: я использую языковой клиент под названием "coc-clangd". Не знаю, важно это или нет.
5 ответов
Clangd использует файл базы данных, который содержит флаги (например, каталоги включения) для каждого файла в проекте. Но этот файл создается автоматически, поэтому все изменения в нем со временем будут перезаписаны. Вы можете попросить CMake добавить любые настраиваемые флаги компиляции с помощью
-DCMAKE_CXX_FLAGS
аргумент командной строки.
Пример для системных заголовков (
#include <file.h>
):
cmake -DCMAKE_CXX_FLAGS="-isystem /path/to/includes" /path/to/source
Для заголовков проектов (
#include "file.h"
):
cmake -DCMAKE_CXX_FLAGS=-Ipath/to/includes /path/to/source
Дополнительно вы можете установить
CXXFLAGS
переменная окружения:
export CXXFLAGS="-isystem /path/to/includes"
cmake path/to/sources
После этого в вашем
compile_commands.json
файл.
Может быть, это полезно: https://clangd.llvm.org/config
Создайте файл с именем '.clangd' на верхнем уровне исходного каталога. Добавьте этот контент.
CompileFlags: # Tweak the parse settings
Add:
- "-I=[folder]"
Но я думаю, что это не рекомендуется, все подключаемые каталоги должны быть добавлены в
CMakeLists.txt
файл.
Можете добавитьincludePath
кclangd.fallbackFlags
в vscodesettings.json
так:
"clangd.fallbackFlags": [
"-I${workspaceFolder}/include",
"-I/my/include"
]
Чтобы использовать автодополнение кода, предоставляемое Clangd, разрешите Clangd извлекать пути включения с помощью вызовов компилятора, используемых CMake. Установите параметр CMAKE_EXPORT_COMPILE_COMMANDS вCMakeLists.txt
, он будет выводиться в каталог сборки при запуске CMake:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
Скопируйте сгенерированныйcompiler_commands.json
в исходный каталог проекта. Clangd теперь будет источником этого файла.
Вы можете использоватьCPATH
переменная среды. Синтаксис такой же, какPATH
переменная.
export CPATH="your/include:more/include:/usr/include"