Eclipse CDT 索引器不包括来自同一项目的 header
Eclipse CDT Indexer not including header from same project
最近升级后(仅更改 SSD 容量),Eclipse CDT Indexer 一直让我很为难。我的项目文件夹结构如下图
LinEmLibrary
└─ test
├─ TestNumParam.cpp
├─ TestNumParam.h
├─ TestPMS.cpp
├─ TestPMS.h
├─ TestSerial.cpp
├─ TestSerial.h
├─ TestWindow.cpp
└─ TestWindow.h
TestWindow.h
有 class 实现顶层 window,其他三个由 class CTestWindow
.
实例化
升级后(直到 运行 完美),Codan(代码分析)开始突出显示我所有 class 实例的声明(CTestNUmParam
、CTestPMS
和 CTestSerial
) 以红色表示 无法解析类型 X。但是我能够执行代码完成(CTRL+SPACE)并解析 class 的所有成员需要很长的时间。 代码正确构建和执行。
我试过了
- 重建索引
- 增加了索引器缓存限制(Window > 首选项 > C/C++ > 索引器 - 缓存限制),
- 相对于最大堆大小的限制:75%
- 绝对限制:1024 MB
- 将
eclipse.ini
中的初始和最大堆大小设置为
- Xms2048m
- Xmx4096m
- 在 Project Settings > C/C++ General > Paths and Symbols 中添加此文件夹的绝对路径,甚至包括我的 header 使用 <>而不是“”
- 创建一个新项目并手动将文件复制到新项目
- 导出项目并在另一台具有相同构建工具的计算机上打开
但在所有情况下结果都是一样的。
当我为 TestWIndow.h
创建解析日志时(右键单击项目资源管理器中的 header 文件,索引 > 创建解析器日志文件)我获得以下输出(删除前 ~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
现在理解了语义突出显示的原因,但是为什么索引器不包括我自己的 header 文件让我一头雾水。
如果有人能提供一些启示,那将是一个很大的帮助。
我的系统信息
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
经过一个月的奋斗,我终于恢复了正常。
问题似乎是我在创建新工作区后导入的首选项。在为代码样式、编辑器字体/颜色等设置环境后,我导出了一次首选项。我记不太清楚了,但我可能是在 运行 Eclipse 2021-03 时创建的。
这次我创建了一个新的工作区并从 SVN 添加了项目,而没有导入首选项和中提琴...我的所有 headers 都已编入索引!后来我单独导出了代码风格和其他模板,并毫无问题地带到了我的新工作区。
我也遇到了 Log4CPlus 的问题,它的所有宏都被标记为 'symbol not resolved'。在检查解析器日志文件时,我看到符号 __cplusplus
被设置为 201402
,即使我在构建设置中选择了 c++20 作为方言。然后我在 Project Settings > C/C++ General > Paths and Symbols > Symbols > GNU C++ 中手动添加符号 __cplusplus
,同时将其设置为 202002。这已修复Log4CPlus 的问题也是如此。
最近升级后(仅更改 SSD 容量),Eclipse CDT Indexer 一直让我很为难。我的项目文件夹结构如下图
LinEmLibrary
└─ test
├─ TestNumParam.cpp
├─ TestNumParam.h
├─ TestPMS.cpp
├─ TestPMS.h
├─ TestSerial.cpp
├─ TestSerial.h
├─ TestWindow.cpp
└─ TestWindow.h
TestWindow.h
有 class 实现顶层 window,其他三个由 class CTestWindow
.
升级后(直到 运行 完美),Codan(代码分析)开始突出显示我所有 class 实例的声明(CTestNUmParam
、CTestPMS
和 CTestSerial
) 以红色表示 无法解析类型 X。但是我能够执行代码完成(CTRL+SPACE)并解析 class 的所有成员需要很长的时间。 代码正确构建和执行。
我试过了
- 重建索引
- 增加了索引器缓存限制(Window > 首选项 > C/C++ > 索引器 - 缓存限制),
- 相对于最大堆大小的限制:75%
- 绝对限制:1024 MB
- 将
eclipse.ini
中的初始和最大堆大小设置为- Xms2048m
- Xmx4096m
- 在 Project Settings > C/C++ General > Paths and Symbols 中添加此文件夹的绝对路径,甚至包括我的 header 使用 <>而不是“”
- 创建一个新项目并手动将文件复制到新项目
- 导出项目并在另一台具有相同构建工具的计算机上打开
但在所有情况下结果都是一样的。
当我为 TestWIndow.h
创建解析日志时(右键单击项目资源管理器中的 header 文件,索引 > 创建解析器日志文件)我获得以下输出(删除前 ~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
现在理解了语义突出显示的原因,但是为什么索引器不包括我自己的 header 文件让我一头雾水。
如果有人能提供一些启示,那将是一个很大的帮助。
我的系统信息
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
经过一个月的奋斗,我终于恢复了正常。
问题似乎是我在创建新工作区后导入的首选项。在为代码样式、编辑器字体/颜色等设置环境后,我导出了一次首选项。我记不太清楚了,但我可能是在 运行 Eclipse 2021-03 时创建的。
这次我创建了一个新的工作区并从 SVN 添加了项目,而没有导入首选项和中提琴...我的所有 headers 都已编入索引!后来我单独导出了代码风格和其他模板,并毫无问题地带到了我的新工作区。
我也遇到了 Log4CPlus 的问题,它的所有宏都被标记为 'symbol not resolved'。在检查解析器日志文件时,我看到符号 __cplusplus
被设置为 201402
,即使我在构建设置中选择了 c++20 作为方言。然后我在 Project Settings > C/C++ General > Paths and Symbols > Symbols > GNU C++ 中手动添加符号 __cplusplus
,同时将其设置为 202002。这已修复Log4CPlus 的问题也是如此。