Могу ли я использовать компилятор GCC и языковой сервер Clangd?

Я работаю над проектом, который использует библиотеку GCC (SFML), которая, насколько мне известно, недоступна для clang. Я использую COC с vim для завершения кода, но для C++ ему нужен clangd. Есть ли способ использовать GCC в качестве моего компилятора, но по-прежнему использовать языковой сервер clangd?

Я также слышал, что может быть способ заставить clang распознавать библиотеки / заголовки GCC, но мне никогда не удавалось заставить его работать правильно. Если бы кто-то мог указать мне в правильном направлении, это тоже было бы полезно. Но я привык к GCC (я использую его с тех пор, как начал программировать на C++), поэтому было бы предпочтительнее использовать clangd и GCC.

3 ответа

Решение

Да, это. Я делаю это с помощью ccls (который также основан на clang).

Учитывая, что моя установка clang не является стандартной (я компилирую ее, настраиваю для использования libC++ по умолчанию, и я устанавливаю ее где-нибудь в своем личном пространстве), мне нужно ввести пути к файлам заголовков, известным clang, но неизвестным другим на основе clang инструменты.

Я получаю их с

clang++ -E -xc++ - -Wp,-v < /dev/null

Что касается других вариантов, связанных с текущим проектом, я обязательно compile_commands.json база данных компиляции (сгенерированная CMake или Bear, если у меня нет другого выбора), и ccls могут работать оттуда. Я ожидаю, что clangd будет очень похож в этих аспектах.

В Ubuntu, если вы хотите использовать набор инструментов gcc, вы можете узнать местоположение установленного компилятора, выполнив команду

      # Replace gcc with the compiler you want to use
gcc -v -c -xc++ /dev/null

Вы увидите такой вывод:

  • Но вам нужно добавлять строки только после начала этого#include <...> search starts here:
      #include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/11
 /usr/include/x86_64-linux-gnu/c++/11
 /usr/include/c++/11/backward
 /usr/lib/gcc/x86_64-linux-gnu/11/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

Теперь ваш~/.config/clangd/config.yamlбудет выглядеть так:

      CompileFlags:
  Add: [-isystem,/usr/include/,-I/usr/include/c++/11,-I/usr/include/x86_64-linux-gnu/c++/11, -I/usr/include/x86_64-linux-gnu/c++/11,-I/usr/include/c++/11/backward,-I/usr/lib/gcc/x86_64-linux-gnu/11/include,-I/usr/local/include,-I/usr/include/x86_64-linux-gnu,-I/usr/include]

Ссылка:

      

простое создание .ccls в каталоге вашего проекта и добавьте --gcc-toolchain=/usrк нему. см. https://github.com/MaskRay/ccls/wiki/FAQ#compiling-with-gcc

Другие вопросы по тегам