我有一个我之前使用Eclipse 3.5.2创建的项目。在其中,我能够在项目属性中设置构建变量。在这种情况下,假设我将SW_VERSION
设置为4403.现在这是一个十六进制数,所以在Build Settings中,我添加了一个Symbol "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
的值附加到我的工件名称的末尾。那部分至少仍然有效。
答案 0 :(得分:2)
Indexer(CDT解析器)看到你的VERSION宏并将其扩展为0x $ {SW_VERSION} 但是没有评估它所以它将它传递给预处理器,因为它是未扩展的, 这些警告来自静态代码分析,不会影响您的二进制文件。但是,因为看到你必须通过仅为索引器定义VERSION宏来强制索引器正确看到这个宏,这很烦人
你放在那里的数字并不重要,因为它不在你的二进制文件中,只是用于语法分析。
答案 1 :(得分:1)
你说:
如果它实际上无法分析代码实际上是什么,那就会使事情变得毫无意义。我做了这个并且它有效,但它使弹出宏扩展显示这个假值而不是真实的东西。
但是我打赌在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),但我认为构建输出解析器也适用于它们。