在项目级别(iOS 应用程序)运行 clang 静态检查器,而不是逐个文件(xcodebuild)



在解决了 ObjectiveC 的 clang AST 中省略的代码块后,我在一个小的 Objective C .m 文件以及适当的 compile_commands.json 上尝试了它,它工作正常,我得到了整个语法树。

现在我正在尝试看看是否可以在整个xcodebuild上运行它

[
{
"directory" : "/Users/xx/Desktop/iOSApplication",
"command" : "xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -project /Users/xx/Desktop/iOSApplication/iOSApplication.xcodeproj/",
"file" : "iOSApplication.xcodeproj"
}
]

当我尝试运行clang-check -ast-dump /Users/xx/Desktop/iOSApplication/iOSApplication.xcodeproj时,它会error: unknown argument: '-project'error: unable to handle compilation, expected exactly one compiler job in ''

实际上是否可以在整个xcode项目上运行基于AST的检查器?或者我应该如何一次编译 1 个文件?

我按照本指南设法生成了 compile_commands.json,http://docs.oclint.org/en/stable/guide/xcodebuild.html

但是,我仍然希望能够在整个项目上运行我的递归ASTVisitor。或者,传入 xcode 项目并枚举所有源文件也可能有效。

有人知道如何将整个xcodebuild项目作为RecursiveASTVisitor的参数传递吗?

现在我像这样运行我的 ASTVisitor./MyASTChecker ~/Desktop/directory/sample1.m但我想让它做一些类似./MyASTChecker ~/Desktop/directory/sampleproject.xcodeproj

我这样做的方式是在编译时使用扫描构建。这适用于基于cmake/make的项目。

scan-build --use-analyzer=clang -enable-checker <checker_name> make

这将读取生成文件并在编译时在每个文件上运行指定的检查器时在其中构建所有内容。如果您只想使用某些标志或特定目标进行构建,则可以执行以下操作:

scan-build --use-analyzer=clang -enable-checker <checker_name> make <build_options>

如果你有一个基于 cmake 的项目。您可能首先希望在构建目录中生成生成文件。我这样做是为了:

cmake <path_to_cmakelists> -DCMAKE_CXX_COMPILER=c++-analyzer -DCMAKE_CC_COMPILER=ccc-analyzer

然后从上面扫描构建将在编译每个文件时编译并运行源文件检查器。

我只用CMAKE/MAKE尝试过这个,但应该像这样使用xcode:

scan-build --use-analyzer=clang -enable-checker <checker_name> xcodebuild 

并带有构建选项

scan-build --use-analyzer=clang -enable-checker <checker_name> xcodebuild <build_options>

您可以在此处阅读有关扫描构建的更多信息

相关内容