【问题标题】:Eclipse CDT indexer - how to solve unresolved includesEclipse CDT 索引器 - 如何解决未解决的包含
【发布时间】:2012-08-25 00:25:33
【问题描述】:

我有一个包含多个项目的工作区,所有项目都可以毫无问题地编译。但是,由于未解析的包含,一些项目在编辑器中给出了很多关于未解析符号的警告。大多数是来自工作区中其他项目或第三方库的标头。

谷歌搜索表明这是索引器的问题,但我没有找到任何关于如何修复它的连贯解释 - 我假设我需要将这些库的路径添加到索引器的 PATH,但我看不到任何选项(我正在使用 Juno)。

谁能给我解释一下如何配置CDT的索引器?

我还在两个项目中收到未解决的包含 STL 标头的警告。一些 STL 标头已解析,但其他标头未解析,并且两个项目之间的列表似乎不一样(一个找到向量和 iostream 之类的东西,但没有找到 sstream 或字符串,另一个也找不到 iostream) .

可能相关:这些是 C++ 项目,但所有文件扩展名都是 .c。我将 GCC C 编译器命令更改为 'g++' 来编译它们,但我想我还需要对索引器设置做一些事情来应对它?

【问题讨论】:

    标签: eclipse-cdt indexer


    【解决方案1】:

    在工作区中右键单击您的项目,选择Properties -> C++ General -> Paths and Symbols,然后在可用选项卡上为您的特定编译器添加包含和符号、添加库和其他您需要的东西。之后点击Apply - 它应该开始重新索引,你的问题应该消失了。

    【讨论】:

    • 感谢您的回复亚历山德鲁。不幸的是,这似乎对我没有帮助——Properties > C++ General > Paths and Symbols 下的列表似乎是C/C++ Build > Settings > Tool Settings > Includes 下列表的镜像,我已经填充了编译项目所需的包含目录的路径。然而,索引器仍然会针对这些目录中的标题发出“未解析的包含”警告。
    • 您可以尝试以下操作:右键单击您的项目,Properties -> Index 并尝试其中的选项:RebuildUpdate with modified filesFreshen all filesSearch for unresolved includes。通常选项 2 和 3 可以解决我的问题。
    • 我已经重建了我的索引,但感谢您的建议。我相信我可能已经破解了这个问题 - 我注意到一个项目中未解决的包含实际上被列在其他项目之一的名称下。因此,我添加了该项目作为参考,重建了索引,现在它显示 0 个未解决的包含。将查看此修复程序是否适用于我的所有项目,如果是,则将其添加为答案:)
    • 谢谢!玩了一段时间后让它工作,我不得不手动添加所有子文件夹
    【解决方案2】:

    好的,我现在已经解决了这个问题。

    1. 通过将其他项目添加为引用解决了工作区中其他项目和第三方库中未解决的包含问题。我猜编译器知道去哪里看,因为我已将位置添加到 Includes 列表中,但索引器没有(可能是由于 eclipse 只处理一次标头?)

    2. 来自 STL 的未解决的包含我通过将我所有实际上是 C++ 的 .c 文件更改为 .cpp 来修复。仅将编译命令更改为“g++”显然不足以告诉索引器将项目视为 C++。

    在 1) 的情况下,我需要先清理/重建引用项目的索引,以删除未解决的包含错误。

    【讨论】:

    • (注意:使用 Eclipse CDT 的 QNX Momentics 风格。)我们有一个完整的“接口”类目录结构,我们没有将其放在任何项目中。基于这个答案,我在“接口”文件夹级别创建了一个项目,其中包括所有子文件夹的标题和源代码。将此文件夹的项目添加为项目参考修复了未解决的包含,突然我的错误和警告都提供了链接! (我告诉这个项目停止构建第一个错误,这样可以避免冗长的编译时间。)
    【解决方案3】:

    我在构建项目时遇到了类似的问题,但在 Eclipse Kepler 中显示未解决的包含。

    在我的例子中,我采用了一个现有的 ARM 项目并创建了一个使用不同工具链的自定义构建配置。新的构建配置包含所有正确的内容,因此项目构建正确,但索引器没有拾取它。

    我通过将索引器设置为使用活动构建配置来修复它。在 Window->Preferences->C/C++->Indexer 中,在标有“为索引器构建配置”的部分下,我选择“使用活动构建配置”并清除它。

    【讨论】:

    • 这对我有帮助。我已将代码移到链接文件夹中,虽然它编译正常,但索引器丢失了那里的所有内容。使用活动构建的设置修复了这个问题,所以必须记住一些历史性的东西。谢谢!
    【解决方案4】:

    所有答案都有帮助,但还有另一个技巧可以解决我的问题。 我发现与编译器相比,索引器不处理包含路径的子目录。因此,在包含头文件时需要更加具体。

    示例
    #include "subdirectory\include_2.h"

    【讨论】:

      【解决方案5】:

      附加提示

      • 右键单击您的project -> Index -> 搜索unresolved includes
      • 在搜索结果中打开文件夹和文件,查看它们有哪些未解决的包含。
      • 找到它们的目录并将它们添加到路径和符号中。

      【讨论】:

        猜你喜欢
        • 2011-08-24
        • 2011-08-19
        • 2014-06-04
        • 2019-04-23
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多