Eclipse CDT 索引器不包括来自同一项目的标头

Posted

技术标签:

【中文标题】Eclipse CDT 索引器不包括来自同一项目的标头【英文标题】:Eclipse CDT Indexer not including header from same project 【发布时间】:2021-11-20 07:35:52 【问题描述】:

在最近一次升级(仅 SSD 容量变化)之后,Eclipse CDT Indexer 一直给我带来困难。我的项目文件夹结构如下图。

LinEmLibrary
└─ test
   ├─ TestNumParam.cpp
   ├─ TestNumParam.h
   ├─ TestPMS.cpp
   ├─ TestPMS.h
   ├─ TestSerial.cpp
   ├─ TestSerial.h
   ├─ TestWindow.cpp
   └─ TestWindow.h

TestWindow.h 具有实现***窗口的类,其他三个由 CTestWindow 类实例化。

升级后(直到一切运行良好),Codan(代码分析)开始用红色突出显示我所有的类实例(CTestNUmParamCTestPMSCTestSerial)的声明 Type X 无法解析。但是,我能够执行代码完成 (CTRL+SPACE) 并解析该类的所有成员,尽管这需要很长的时间。 代码正确构建和执行

我试过了

重建索引 增加了索引器缓存限制(窗口 > 首选项 > C/C++ > 索引器 - 缓存限制), 相对于最大堆大小的限制:75% 绝对限制:1024 MB 将eclipse.ini 中的初始和最大堆大小设置为 Xms2048m Xmx4096m 在 Project Settings > C/C++ General > Paths and Symbols 中添加此文件夹的绝对路径,甚至使用 而不是 "" 包含我的标题 创建一个新项目并将文件手动复制到新项目中 导出项目并在另一台具有相同构建工具的计算机中打开

但在所有情况下,结果都是一样的。

当我为 TestWIndow.h 创建解析日志时(右键单击项目资源管理器中的头文件,Index > Create Parser Log File)我得到以下输出(删除了前约 12,000 行) .

Unresolved includes (from headers in index):
   file:/home/mohith/eclipse_workspace/LinEmLibrary/test/TestNumParam.h is not indexed
   file:/home/mohith/eclipse_workspace/LinEmLibrary/test/TestPMS.h is not indexed
   file:/home/mohith/eclipse_workspace/LinEmLibrary/test/TestSerial.h is not indexed

Unresolved names:
   Attempt to use symbol failed: CTestNumParam in file /home/mohith/eclipse_workspace/LinEmLibrary/test/TestWindow.h:76
   Attempt to use symbol failed: CTestPMS in file /home/mohith/eclipse_workspace/LinEmLibrary/test/TestWindow.h:77
   Attempt to use symbol failed: CTestSerial in file /home/mohith/eclipse_workspace/LinEmLibrary/test/TestWindow.h:78
   A template id provides illegal arguments for the instantiation: map in file /home/mohith/eclipse_workspace/LinEmLibrary/test/TestWindow.h:80
   Attempt to use symbol failed: EGridType in file /home/mohith/eclipse_workspace/LinEmLibrary/test/TestWindow.h:80

现在可以从中理解语义突出显示的原因,但是为什么索引器不包括我自己的头文件让我一无所知。

如果有人能提供一些启示,那将是一个很大的帮助。

我的系统信息

Eclipse
  Version: 2021-09 (4.21.0)
  Build id: 20210910-1417
  CDT: 10.4.0.202109080104
OS  Ubuntu 20.04 x86-64
RAM: 16 GiB
CPU: Intel® Core™ i5-8265U CPU @ 1.60GHz

【问题讨论】:

【参考方案1】:

经过一个月的努力,我终于让一切恢复正常。

问题似乎是我在创建新工作区后要导入的首选项。在为代码样式、编辑器字体/颜色等设置环境后,我已经导出了一次首选项。我不记得确切但我可能在运行 Eclipse 2021-03 时创建了它。

这次我创建了一个新的工作区,并从 SVN 添加了项目,而没有导入首选项和中提琴……我所有的标题都被索引了!后来我单独导出了代码样式和其他模板,并将其带入我的新工作区,没有任何问题。

我还遇到了 Log4CPlus 的问题,它的所有宏都被标记为“符号未解析”。在检查解析器日志文件时,我看到符号 __cplusplus 被设置为 201402,即使我在构建设置中选择了 c++20 作为方言。然后我在 Project Settings > C/C++ General > Paths and Symbols > Symbols > GNU C++ 中手动添加了符号 __cplusplus,同时将其设置为 202002。这也解决了 Log4CPlus 的问题。 p>

【讨论】:

以上是关于Eclipse CDT 索引器不包括来自同一项目的标头的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse CDT 中优化的项目结构

Eclipse CDT 崩溃 java

用于远程构建的 Eclipse CDT 设置

CDT 索引器找不到 std::unordered_map

centos 配置eclipse jdt和cdt

如何使用 Eclipse CDT 构建 SCons 项目?