铿锵++';s静态分析器和makefile

铿锵++';s静态分析器和makefile,makefile,clang-static-analyzer,Makefile,Clang Static Analyzer,我最近发现了clang++的静态分析器特性,它非常适合仔细检查我的代码以发现潜在的bug。我只是在Makefile中取消注释这一行: CXXFLAGS += --analyze -Xanalyzer -analyzer-output=text 等等,瞧,我正处于深度bug检查模式 然而,这种方法的一个小问题是,每当分析器在特定的.cpp文件中没有发现任何问题时,就不会生成任何.o文件 通常这没什么大不了的(我总是可以重新注释上面的行以构建实际的可执行文件),但通常当我看到analyzer警告时

我最近发现了clang++的静态分析器特性,它非常适合仔细检查我的代码以发现潜在的bug。我只是在Makefile中取消注释这一行:

CXXFLAGS += --analyze -Xanalyzer -analyzer-output=text
等等,瞧,我正处于深度bug检查模式

然而,这种方法的一个小问题是,每当分析器在特定的.cpp文件中没有发现任何问题时,就不会生成任何.o文件

通常这没什么大不了的(我总是可以重新注释上面的行以构建实际的可执行文件),但通常当我看到analyzer警告时,我想做的第一件事是尝试修复潜在的问题,然后重新运行make

。。。这是可行的,但由于没有生成.o文件,make将从头开始重新分析所有.cpp文件,而不仅仅是上次运行后实际修改的.cpp文件。这意味着我会花费大量时间重新检查未更改的.cpp文件

我的问题是,有没有办法让静态分析器输出一个.o文件(它不必是有效的对象文件,只要是任何具有更新时间戳的文件),这样Make就会知道“clean”.cpp文件不需要重新处理?(即,使工作方式与正常编译时的工作方式相同)

请查看,并在那里下载软件包。您可以使用随附的
扫描生成
工具执行您正在尝试的操作

通常的使用方法是去掉上面的标志,然后运行:

$ scan-build make whatever

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

我认为您不想创建无效的对象文件。如果你这样做了,make将不会将该文件重建为真正的对象文件(因为它的时间戳比源文件新),链接将失败;使“恢复”。至少,这比必须重新分析(N-1)个文件才能重新分析第N个文件要好。没错,但似乎没有必要。为什么不添加规则来将分析构建到其他文件,而不是对象文件?只要分析涉及到某个文件,就足以避免重做构建,如果你不处理对象文件,那么你就可以两全其美。无论如何,我看到你找到了一个适合你的解决方案。这似乎是正确的方法。谢谢没问题。祝你好运