Есть ли в 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"
Другие вопросы по тегам