我正在做一个使用GCC库(SFML)的项目,据我所知,它不适用于clang。我使用COC和vim来完成代码,但对于C它需要clangd。有没有一种方法可以使用GCC作为我的编译器,但仍然使用clangd语言服务器?我还听说有一种方法可以让clang识别GCC库/头文件,但我从来没有能够让它正常工作。如果有人能给我指出正确的方向,那也会很有帮助。但是我已经习惯了GCC(自从我开始C编程以来就一直在使用它),所以能够使用clangd * 和 * GCC会更好。
93ze6v8z1#
是的。我用ccls(也是基于clang的)做的。由于我的clang安装不是标准的(我编译了它,默认情况下将其调优为使用libc++,并将其安装在我个人空间的某个地方),我必须注入clang已知但其他基于clang的工具未知的头文件的路径。我是用
clang++ -E -xc++ - -Wp,-v < /dev/null
字符串关于与当前项目相关的其他选项,我确保有一个compile_commands.json * 编译数据库 *(由CMake生成,如果没有其他选择,则由bear生成),ccls可以从那里工作。我预计clangd在这些方面会相当相似。
compile_commands.json
dffbzjpn2#
在ubuntu上,如果你想使用gcc工具链,你可以通过
# Replace gcc with the compiler you want to usegcc -v -c -xc++ /dev/null
# 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/includeEnd of search list.
#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看起来像这样:
~/.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]
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]
型参考文件:
wswtfjt73#
指挥中心回答错问题了对于使用ccls的用户:1.在项目目录中创建一个.ccls文件,并将--gcc-toolchain=/usr追加到该文件中。1.使用this tool生成compile_commands.json文件请参阅https://github.com/MaskRay/ccls/wiki/FAQ#compiling-with-gcc
ccls
.ccls
--gcc-toolchain=/usr
3条答案
按热度按时间93ze6v8z1#
是的。我用ccls(也是基于clang的)做的。
由于我的clang安装不是标准的(我编译了它,默认情况下将其调优为使用libc++,并将其安装在我个人空间的某个地方),我必须注入clang已知但其他基于clang的工具未知的头文件的路径。
我是用
字符串
关于与当前项目相关的其他选项,我确保有一个
compile_commands.json
* 编译数据库 *(由CMake生成,如果没有其他选择,则由bear生成),ccls可以从那里工作。我预计clangd在这些方面会相当相似。dffbzjpn2#
在ubuntu上,如果你想使用gcc工具链,你可以通过
字符串
您将看到如下输出:
#include <...> search starts here:
开始的行型
现在,您的
~/.config/clangd/config.yaml
看起来像这样:型
参考文件:
wswtfjt73#
指挥中心回答错问题了对于使用
ccls
的用户:1.在项目目录中创建一个
.ccls
文件,并将--gcc-toolchain=/usr
追加到该文件中。1.使用this tool生成
compile_commands.json
文件请参阅https://github.com/MaskRay/ccls/wiki/FAQ#compiling-with-gcc