YouCompleteMe 找不到带有compile_commands.json 的系统标头

问题描述 投票:0回答:1

在 YouCompleteMe 文档上,有两个选项用于设置对 C/C++ 语义支持的支持。第一个是使用带有 CMake 的编译数据库(例如文件compile_commands.json),第二个是使用 .ycm_extra_conf.py。幸运的是,我使用 Cmake,所以我能够生成编译数据库。 YouCompleteMe 对于我的项目中的源工作正常,但是,它无法找到以下文件的标头:系统标头(例如 iostream),并且无法找到我的项目中的外部项目中包含的标头文件(即 git 子模块与 CMake 结合使用)外部项目_添加(...))。从文档中我不清楚的是我是否应该使用 ycm_extra_conf.py 和compile_commands.json 的组合。有人可以给我一些建议,解释为什么我的编译数据库没有足够的信息让我找到所有必要的头文件吗?

vim clang youcompleteme
1个回答
0
投票

自从我积极使用 YCM 以来已经有一段时间了,但据我所知,

ycm_extra_conf.py
可以用来为
compile_commands.json
中找到的参数添加额外的参数(也许这就是为什么它被称为“额外”?) 。在我的 Vim 配置文件夹中,我保留了一个
ycm_extra_conf.py
文件,并创建了指向它的符号链接或将其复制到我的项目文件夹中。

def FlagsForFile(filename, **kwargs):
    return {
        'flags': [
            '-Wall',
            '-Wextra',
            '-Werror',
            '-Wno-long-long',
            '-Wno-variadic-macros',
            '-fexceptions',
            '-ferror-limit=10000',
            '-DNDEBUG',
            '-std=c99',
            '-x', 'c',
            '-D_GNU_SOURCE',
            '-I.',
            '-I', '/usr/include/'
        ],
        'do_cache': True,
    }

# vim:set et sw=4 ts=4 tw=120:

正如你所看到的,我已经添加了

'-I', '/usr/include/'
并且根据项目的不同,添加 linux 内核头文件的路径也可能是有意义的,或者对于 c++ 可能是类似
/usr/include/c++/14.1.1/
的路径(你的包管理器可以帮助你找到这些文件,例如
pacman -Ql gcc | grep iostream
)

如果它不适用于配置,您还可以手动编辑

compile_commands.json
,搜索当前正在编辑的文件并修改
"command": "...
以添加更多包含目录,例如
-I /usr/include
。如果这对您有用,我将很乐意帮助创建一些快捷命令来自动为
compile_commands.json

中的所有文件执行此操作
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.