【问题标题】:Using Build Variables in C code with Eclipse 4.4.2在 Eclipse 4.4.2 中使用 C 代码中的构建变量
【发布时间】:2017-03-30 09:42:12
【问题描述】:

我有一个以前使用 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 的值附加到我的工件名称的末尾。至少那部分仍然有效。

【问题讨论】:

  • 您使用的是哪种类型的项目? Autotools,标准 makefile ...
  • 我让 Eclipse 生成 makefile。

标签: c eclipse eclipse-cdt


【解决方案1】:

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

  • 项目属性->C/C++ 通用->预处理器..->
  • 选择 GNU C(或您使用的任何语言变体)->
  • 选择 CDT 用户设置条目
  • 点击添加...并添加“预处理器宏”VERSION=1

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

【讨论】:

  • 哇,就是这样,哇。如果它不能真正分析代码实际上是什么,那它就变得毫无意义。我这样做并且它有效,但它使弹出宏扩展显示这个假值而不是真实值。我会忍受它,但似乎添加了一个真正的问题,它过去并没有错。乐叹息。
  • @JonS CDT 自您使用上一个版本以来的 6 年里取得了长足的进步,不幸的是,看到您发现了回归,我很难过。我鼓励您提交错误报告bugs.eclipse.org/bugs/enter_bug.cgi?product=CDT。可能eclip.se/360155已经是这样的报道了。
【解决方案2】:

你说:

如果它不能真正分析代码的实际含义,那它就会变得毫无意义。我这样做并且它有效,但它使弹出宏扩展显示这个假值而不是真实值。

但我敢打赌,在 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),但我认为构建输出解析器也应该适用于它们。

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多