YouCompleteMe C++ 没有使用 compile_commands.json 找到头文件

如何解决YouCompleteMe C++ 没有使用 compile_commands.json 找到头文件?

我正在为斯坦福大学的 CS106B 课程和C++ 中的抽象编程教科书编写课程材料。许多练习都需要 StanfordCPPLib 库,并且提供了带有该库的预配置 Qt starter project。由于 Qt Creator 在我的机器上运行得不是特别好,我想编写大多数不使用它的独立练习。

我对 C++ 构建系统完全不熟悉,但参考 https://iitd.github.io/col100/labs/without-qt.html 处的脚本,我已经能够编译和运行程序,并生成一个有效的 compile_commands.json 文件

[
 {
  "directory": "Path/To/Project/Directory","arguments": [
   "g++","-std=c++11","-I","Path/To/StanfordCPPLib/","Path/To/StanfordCPPLib/collections","Path/To/StanfordCPPLib/graphics","Path/To/StanfordCPPLib/io","Path/To/StanfordCPPLib/private","Path/To/StanfordCPPLib/system","Path/To/StanfordCPPLib/util","-L","-o","build/exercise","src/exercise.cpp","-lstanford","-ldl","-lpthread"
  ],"file": "src/exercise.cpp"
 }
]

YouCompleteMe 似乎加载了此文件,但无法解析任何库头文件的位置。将所有库的标题复制到 src 目录中似乎可以消除所有错误,但我想找出实际的修复方法。我知道使用 .ycm_extra_conf.py,但我认为我不太了解 C++ 构建系统或工具,无法自己编写。

PS::YcmDebugInfo输出

Printing YouCompleteMe debug @R_895_4037@ion...
-- Resolve completions: Never
-- Client logfile: /var/folders/31/xkn6lwrs7_382lqhy5f9wzbc0000gn/T/ycm_lp1d0854.log
-- Server Python interpreter: /usr/local/opt/python@3.9/bin/python3.9
-- Server Python version: 3.9.6
-- Server has Clang support compiled in: True
-- Clang version: clang version 12.0.0
-- No extra configuration file found
-- C-family completer debug @R_895_4037@ion:
--   Clangd running
--   Clangd process ID: 1629
--   Clangd executable: ['/Users/calvinxu/.vim/plugged/YouCompleteMe/third_party/ycmd/third_party/clangd/output/bin/clangd','-header-insertion-dec
orators=0','-resource-dir=/Users/calvinxu/.vim/plugged/YouCompleteMe/third_party/ycmd/third_party/clang/lib/clang/12.0.0','-limit-results=500']
--   Clangd logfiles:
--     /var/folders/31/xkn6lwrs7_382lqhy5f9wzbc0000gn/T/clangd_stderryvevfbuh.log
--   Clangd Server State: Initialized
--   Clangd Project Directory: /Path/To/Project/src
--   Clangd Settings: {}
--   Clangd Compilation Command: False
-- Server running at: http://127.0.0.1:55070
-- Server process ID: 1627
-- Server logfiles:
--   /var/folders/31/xkn6lwrs7_382lqhy5f9wzbc0000gn/T/ycmd_55070_stdout_oqm7j_4p.log
--   /var/folders/31/xkn6lwrs7_382lqhy5f9wzbc0000gn/T/ycmd_55070_stderr_v0pmvjq1.log

编辑:

貌似CMake的编译数据库没有包含头文件的信息,很多人讨论过:

我了解了一个操作编译数据库的小工具 Sarcasm/compdb,特别是具有“生成带有头文件的编译数据库”的能力,如作者的mentioned

使用 compile_commands.json 生成新的 compdb 似乎解决了这个问题。但是,如果有人能帮我找出更通用的 .ycm_extra_conf.py 配置,我将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

其他编程问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?