Jenkins 中用cppncss 做C++ 代码的静态质量检查时,在Jenkins Job Build 时失败,出现很多类似下面的错误:
事实上,让cppncss 检查的代码在正常build 时是成功的。出现上面的错误,是因为在Jenkins Job 中,cppncss 不能自动正确找到类似上面的 INT 类型定义。遇到的错误中还有很多因为找不到定义而误报的 define/macro 错误。
CppNcss Tutorial 的“Defines and Macros”章节介绍了一种方法:
-D<symbol>[=[<value>]] replace define <symbol> with <value>
-M<symbol>[=[<value>]] replace macro <symbol> with <value>
- 例如,通过在cppncss 命令行中追加 -DXXX 这样的参数,显示定义XXX define
- 例如,通过在cppncss 命令行中追加 -MYYY= 这样的参数,去除YYY macro
使用了这种方法,错误貌似减少了一点点,但是这种方法并不怎么好,因为大部分稍微复杂一点的宏都不能这样简单糊弄过去,该展开的还是应该展开;如果不符合实际情况,这个静态检查也没有意义。
貌似还没有一个简单易行的方法,能让cppncss 在静态检查时自动找到正确的 define/macro
附:
生成的Sonar 报表截图: