Eclipse 索引 - 各种选项的作用

Eclipse indexing - what do the various options do

当您 right-click > index 在一个项目上时,有几个选项:

  1. 重建
  2. 刷新所有文件
  3. 使用修改后的文件更新
  4. 重新解析未解析的包含

我每次都只是点击重建,但现在我正在做一个巨大的项目,而且负担不起;当我修改文件时,无论是 .cpp 还是 .h,我都需要知道要执行哪个 'index' 操作。

对于每个 'index' 选项:

  1. 具体是做什么的?
  2. 成本是多少(相对内存,CPU时间)?

来自 Eclipse 的文档会有所帮助,但已经搜索过但没有找到任何文档。

Rebuild 只能对整个项目执行。它丢弃项目的整个索引并从头开始重建它,为项目中的每个文件建立索引。

由于它首先会丢弃之前的索引,因此取消重建将导致索引为空或部分构建。


其他操作既可以对整个项目执行,也可以对项目中的文件夹或文件(或 folders/files 组)执行。

他们都遍历选择中的文件,并更新索引中的部分或全部文件。不像Rebuild,它们不是从清除索引开始的,所以取消它们是相对安全的。

刷新所有文件 更新选择中的所有文件。如果在项目上调用,最终结果与Rebuild相当。

更新修改后的文件 仅更新选择中自上次在索引中更新后发生更改的文件,由它们的时间戳和它们的散列确定内容。

Re-Resolve Unresolved Includes 仅更新选择中配置信息(例如指定的包含路径)已更改且更改导致包含的文件以前未解决的现在正在解决。


根据项目大小和您使用的机器类型 运行,性能特征可能会有很大差异。我从事一个非常大的项目(数百万行),在相对现代的桌面上 Rebuild 可能需要 20-30 分钟。该操作通常是 CPU 绑定的,但索引器目前是单线程的,因此它只会使用一个 CPU 核心。


最后,我想再提一下我在问题的评论中说的:如果你在Preferences | C/C++ | Indexer配置索引自动更新,你应该不需要手动调用这些命令至少在理论上是这样。在实践中,我发现偶尔 Rebuild 是必要的(比如每隔几周一次),尤其是在配置更改之后(例如添加新的包含路径)。


资料来源:此 mailing list post,阅读操作的实施,以及使用 CDT 的经验。