有没有办法从Keil构建配置中导出预定义的宏?

时间:2017-06-23 10:10:01

标签: lint keil predefined-macro

背景:

我试图使用Keil自动化嵌入式开发中的一些更平凡的任务。我最终的目标是在Keil项目中单击构建将运行预构建步骤,通过Uncrustify(源代码美化器)运行所有代码,以确保它符合公司样式指南,并且后构建步骤,然后通过pc-lint(静态代码分析器)运行代码,以突出显示它可能找到的任何可能不安全的代码。我编写了一个PC实用程序,它在.uvproj文件中搜索#define宏,包含路径和文件路径,这两个工具都需要这些工具,然后将构建前和构建后的用户命令修改为调用我的批处理文件来管理这两个步骤。 unrustify部分工作正常,棉绒部分产生一些明智的信息,但信噪比并不是那么好。

我的问题:

Lint继续生成似乎与Keil编译器知道的宏相关的消息,但Lint不是。我试图找到一种方法来填补这个空白。我发现在Keil网站上记录了一个table of predefined macros,这似乎是一个好的开始,但不是手动将它们复制到一个静态的.lnt文件中,我想找到一种方法来抓住它。项目构建时的日期值。这样," __ ARMCC_VERSION"例如,每当开发人员更新他/她的Keil编译器时,就会更新宏,而不是每当我手动复制它时卡在某个时间点。

如果有人可以直接回答我的问题,我会喜欢它,但如果有人有一个可行的建议,我可以尝试更直接的替代方法,我会同样感到高兴。非常感谢!

1 个答案:

答案 0 :(得分:1)

我假设你正在使用Keil ARM编译器。

来自Compiler User Guide

  

要列出在命令行上定义的,由编译器预定义并在头文件和源文件中找到的宏,请使用带有非空源文件的--list_macros

     

要仅列出编译器预定义并在命令行中指定的宏,请使用带有空源文件的--list_macros

修改

看起来您的SDK还添加了一些宏。

来自µVision User's Guide

  

添加以下控制字符串,具体取决于MDK的使用:

     

__ UVISION_VERSION:

     

μVision的主要版本和次要版本。例如:-D__UVISION_VERSION="520"

     

RTE

     

使用RTE时设置。例如:-D_RTE_

     

__ RTX:

     

目标 - 目标 - 操作系统选项中选择 RTX内核时设置。使用RTE时未设置。例如:-D__RTX

     

__ MICORLIB:

     

目标选项 - 目标中启用使用MicroLIB 时设置。例如:-D__MICROLIB

     

__ EVAL:

     

μVision在评估模式下运行。许可证MDK-Lite。例如:-D__EVAL

     

设备标题名称

     

设备标题名称。