C语言 报告许多错误:未知变元

omqzjyyz  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(235)

我正在运行一个基于tricore-gcc编译器的嵌入式C项目。我创建了一个运行良好的compile_commands.json文件。但是,有一些clang-tidy无法识别的参数。例如,我得到了以下内容

error: unknown argument: '-fstrict-volatile-bitfields' [clang-diagnostic-error]

当然,这并不奇怪,因为-fstrict-volatile-bitfieldsgcc的选项,而不是clang-tidy的选项。
但是,由于未知的编译器选项,我希望抑制输出消息。
我尝试按照here的建议附加--extra-arg=-Wno-unknown-warning-option,但问题仍然存在。

rxztt3cl

rxztt3cl1#

我在使用clang-tidy编译一个GCC项目时遇到了同样的问题。两个编译器有不同的识别标志集。我的compile_commands.json是由intercept-build生成的,它包含了许多clang-tidy不理解的GCC使用的选项。
我通过一个有点笨拙的解决方案解决了这个问题,即在启动静态分析之前编辑编译数据库。
我的脚本包含许多类似于以下内容的Sed行:

sed -i -E 's#-fconserve-stack##g' compile_commands.json
sed -i -E 's#-maccumulate-outgoing-args##g' compile_commands.json
sed -i -E 's#-mindirect-branch-register##g' compile_commands.json
sed -i -E 's#-mindirect-branch=thunk-extern##g' compile_commands.json
sed -i -E 's#-mpreferred-stack-boundary=3##g' compile_commands.json
sed -i -E 's#-mfunction-return=thunk-extern##g' compile_commands.json

这样,不支持的标志对于clang-tidy来说是不可见的,这使得可以无错误地工作。

相关问题