clang++的静态分析器和Makefiles

5

我最近发现clang++的静态分析器功能,针对代码进行细致检查以发现潜在漏洞非常棒。我只需要取消我的Makefile中的这行注释:

CXXFLAGS += --analyze -Xanalyzer -analyzer-output=text

现在我正在进行深度调试。

然而,这个方法有一个小问题。当分析器在某个.cpp文件中没有找到任何问题时,不会生成任何.o文件。

通常情况下这并不是什么大问题(我总是可以重新注释上面的行来构建一个实际的可执行文件),但通常当我看到分析器警告时,我想做的第一件事就是尝试修复潜在的问题,然后重新运行make。

...虽然这样做是可行的,但是由于没有生成.o文件,make将重新从头开始重新分析所有的.cpp文件,而不仅仅是我在上次运行之后实际修改的.cpp文件。这意味着我最终会花费相当多的时间重新检查那些没有改变的.cpp文件。

我的问题是,是否有办法让静态分析器输出一个.o文件(它不必是一个有效的目标文件,只要有一个更新的时间戳即可),以便Make知道“干净”的.cpp文件不需要重新处理?(也就是使Make在进行正常编译时能够正常工作)


我认为你并不想创建一个非有效的目标文件。如果你这样做,那么make不会重新构建该文件作为真正的目标文件(因为其时间戳比源文件新),链接将失败。 - MadScientist
对我来说那没问题,我只需要执行“make clean; make”命令就可以恢复了。至少这比重新分析前N-1个文件以便重新分析第N个文件要好。 - Jeremy Friesner
真的,但似乎是不必要的。为什么不只是将规则添加到构建分析的其他文件中,而不是对象文件?只要分析涉及某个文件,就足以避免重新构建,如果您不搞乱对象文件,那么您就可以兼顾两全。无论如何,我看到您已经找到了适合自己的解决方案。 - MadScientist
1个回答

5

请访问clang静态分析器页面,并下载相应的软件包。你可以使用附带的scan-build工具进行所需操作。

使用的常规方法是删除上述标志,然后运行以下命令:

$ scan-build make whatever

它应该“只需工作”。如果您不使用标准的make变量名称,则可能需要传递一些更多的标志或设置一些环境变量。


1
这似乎是正确的方法。谢谢! - Jeremy Friesner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接