c++ - clangd 中是否有“includePath”选项?
问题描述
我曾经使用 VSCode C/C++扩展。这个扩展中有一个特性(在一个 json 文件中),称为“includePath”,我可以为我的头文件设置路径,所以在不执行 CMake 或 make 的情况下,我会从这些文件中获得我的头文件和代码完成的建议.
现在我已经切换到 neovim 和 clangd 作为代码完成的语言服务器。我搜索了很多以在 clangd 选项中找到相应的功能,但除了这个链接之外我找不到任何东西。
由于clangd是一个强大的语言服务器,我想知道它是否没有这样的功能。所以我想知道clangd中真的有这样的功能吗?如果是,我该如何使用它?
注意:我使用了一个名为"coc-clangd"的语言客户端。我不知道这是否重要。
解决方案
Clangd 使用compile_commands.json
数据库文件,其中包含项目中每个文件的标志(例如包含目录)。但是这个文件是自动生成的,所以对它的所有修改最终都会被覆盖。您可以要求 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
文件中。
推荐阅读
- c - C 中的 0/0 - gcc-7 或更高版本
- c# - 剃刀错误:不包含定义
- javascript - 从 Node.JS 中的外部 .js 文件调用方法
- dependencies - nuget中的条件依赖
- c# - Asp.net mvc:需要对象引用 调用 [Required(ErrorMessage) 中的函数时出错
- python - Catch 子句不适用于 hive_context.read.json 函数
- angular - 将 Observable 从 JSON 映射到数组
- xml - 在scala中流式传输xml文件
- mysql - Sequelize belongsTo 更改标识符
- java - 为什么 java 应用程序在 Docker 容器中启动而不在暴露的端口上可用?