Могу ли я использовать компилятор 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]
Ссылка:
- https://clangd.llvm.org/guides/system-headers#search-directories-used-with-compile-flags
- https://medium.com/linux-with-michael/how-to-setup-clangd-with-gcc-headers-and-neovim-lsp-for-competitive-programming-2f3f98425ae1
простое создание
.ccls
в каталоге вашего проекта и добавьте
--gcc-toolchain=/usr
к нему. см. https://github.com/MaskRay/ccls/wiki/FAQ#compiling-with-gcc