【发布时间】:2015-11-10 19:33:56
【问题描述】:
我正在使用 ARM DS-5 v5.20.0 包中的 Eclipse CDT v4.3.2 进行代码开发和调试 Makefile 项目。
makefile 实际上是 mkefile 的层次结构,它根据命令行选项在多个配置中创建多个目标。
为了进行有效的静态分析,我使用项目的设置Paths and Symbols 来帮助索引器找到各种包含文件并突出显示正确的条件编译代码段。
我们的项目包含一个头文件,该文件包含在代码树中的许多模块中。但是,头文件的两个变体存在于两个相邻的目录中,用于有条件地与两个构建配置一起使用:
My_Project
|
+-- Include_1
| |
| +-- header.h
|
+-- Include_2
| |
| +-- header.h
|
+-- Source
| |
| +-- module_1.c
|
+-- makefile
这两个变体大多相似,但包含一些差异。这些标头包含一些宏定义和一个enumerated typedef。具体来说,以下示例部件在两个变体中是相同的:
// header.h
#define SYMBOL 0x1
typedef enum {
constant = 0x2
} enum_t
典型的代码模块包括这些头文件之一,具体取决于 makefile 中的配置,并包含对 SYMBOL 和 constant 的引用。
在paths and Symbols 选项卡中,我只将My_Project/Include_1 添加到路径列表中,因此索引器不应混淆。我还在Window->Preferences->C/C++->Indexer 菜单中禁用了Allow heuristic resolution of includes 选项(事实上,我禁用了所有索引器选项)。
所有这些,当我在编辑器中打开module.c 文件时,对constant 的引用用红色波浪下划线标记,并指示Symbol 'constant' could not be resolved 错误。同时,对SYMBOL 的引用没有错误指示。
当我将其中一个头文件重命名为 header_x.h 时,错误指示就会消失。
1.为什么我会收到这些索引器错误指示?
2。我怎样才能消除它们?
3.为什么只有枚举而不是#define-s?
【问题讨论】:
-
我不知道这个问题的答案,但是如果您在 SO 上没有得到好的答案,您可以尝试交叉发帖到 CDT 社区论坛:eclipse.org/forums/index.php/f/80 或者如果您使用的 DS5 是商业产品,我会直接向 ARM 请求帮助,因为许可费包括支持。
-
@JonahGraham - 谢谢。我在 Eclipse 论坛上的体验不是很好。通常,SO(和一般的 SE)是提出非主流问题的最佳场所。过去我确实使用过几次 ARM 帮助(事实上,他们当前的版本包括我报告的至少两个错误修复!)。我认为这个问题不是 ARM 特定的,其他 CDT 用户可能遇到过。无论如何,这可能是我的下一站。
-
我同意你的所有观点,只是提供一些第二站,以防你在这里没有得到太多回应。我希望 ARM 也愿意修复 CDT 错误! PS,如果你在 GitHub 上贴一个 MCVE,我很乐意看看(我已经做了一段时间的 CDT 开发,只是没有立即对你的问题有答案)
-
@JonahGraham - 谢谢。什么是 MCVE?
标签: c include eclipse-cdt indexer