在 Eclipse 4.4.2 中使用 C 代码中的构建变量

Using Build Variables in C code with Eclipse 4.4.2

我有一个以前使用 Eclipse 3.5.2 创建的项目。在其中,我能够在项目属性中设置构建变量。在这种情况下,假设我将 SW_VERSION 设置为 4403。现在这是一个十六进制数字,因此在构建设置中,我添加了一个符号 "VERSION=0x${SW_VERSION}" 条目。然后在我的代码中,我可以使用 VERSION 作为常规数字,如下所示:

unsigned int vers = VERSION;

没有问题,vers得到了值0x4403

现在我使用的是 Eclipse 4.4.2 版,并且正在用一些新功能更新我的项目。但首先我只是尝试使用新工具链重新编译我的旧项目,虽然我在控制台上没有收到任何消息,但我在“问题”选项卡中收到了 3 条警告:

Symbol 'SW_VERSION' could not be resolved
Symbol '$' could not be resolved
Statement has no effect 'VERSION'

我还没有尝试 运行 完成的项目,但这让我很担心,我不得不假设它实际上不会像以前那样工作。在较新的 Eclipse 中是否有一些不同的方法可以做到这一点,或者这个功能已经消失了?

附带说明一下,我这样做是有原因的。我还在工件名称的末尾附加了 SW_VERSION 的值。至少那部分仍然有效。

索引器(CDT 解析器)看到您的 VERSION 宏并将其扩展为 0x${SW_VERSION} 但不对其进行评估,因此它将未扩展的传递给预处理器, 这些警告来自静态代码分析,不会影响您的二进制文件。但是因为看到你必须通过为索引器定义 VERSION 宏来强制索引器正确地看到这个宏很烦人

  • 项目属性->C/C++ 通用->预处理器..->
  • Select GNU C(或您使用的任何语言变体)->
  • Select CDT 用户设置条目
  • 单击添加...并添加 "Preprocessor macro" VERSION=1

你放什么数字并不重要,因为它不会在你的二进制文件中,它只是用于语法分析。

你说:

Makes the thing kind of pointless if it can't actually analyze what the code actually is. I did this and it works, but it makes the pop-up macro expansion show this fake value rather than the real thing.

但我敢打赌,在 Eclipse 3.5.2 中,弹出式宏扩展甚至不会出现 VERSION

换句话说,索引器从未正确解析VERSION。我相信围绕 Eclipse 3.7,唯一改变的是索引器错误开始出现在 UI 中,这就是为什么您会开始看到像 Symbol '$' could not be resolved.

这样的错误的原因

现在,关于解决您的问题:构建输出解析器 (Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers tab -> <Your Toolchain> Build Output Parser) 是否已启用?

它应该能够为索引器获取正确的 VERSION 值,通过解析构建的输出,包括编译器调用(可能包含 ${SW_VERSION} 的扩展值, 否则无法编译).

我对生成的 makefile 项目没有太多经验(我编写自己的 makefile),但我认为构建输出解析器也应该适用于它们。