在解决了这个Omitted code blocks from clang AST for ObjectiveC之后,我在一个小的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 ''
是否可以在整个xcodeproject上运行基于AST的检查程序?或者我应该如何一次编译文件1?
答案 0 :(得分:0)
我已按照此指南http://docs.oclint.org/en/stable/guide/xcodebuild.html
设法生成compile_commands.json但是,我仍然希望能够在整个项目中运行我的RecursiveASTVisitor。或者,传入xcode项目并枚举所有源文件也可能会起作用。
任何人都有想法如何将整个xcodebuild项目作为RecursiveASTVisitor的参数传递?
现在我正在运行我的ASTVisitor ./MyASTChecker ~/Desktop/directory/sample1.m
,但我想让它像./MyASTChecker ~/Desktop/directory/sampleproject.xcodeproj
答案 1 :(得分:0)
我这样做的方法是在编译时使用scan-build。这适用于基于cmake / make的项目。
scan-build --use-analyzer=clang -enable-checker <checker_name> make
这将读取makefile并在其中构建所有内容,同时在每个文件上运行指定的检查器,因为它已编译。如果您只想使用某些标志或特定目标进行构建,则可以执行以下操作:
scan-build --use-analyzer=clang -enable-checker <checker_name> make <build_options>
如果你有一个基于cmake的项目。您可能首先要在构建目录中生成makefile。我是这样做的:
cmake <path_to_cmakelists> -DCMAKE_CXX_COMPILER=c++-analyzer -DCMAKE_CC_COMPILER=ccc-analyzer
然后从上面进行scan-build将编译并在编译每个文件时对源文件运行检查器。
我只用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>
您可以阅读有关scan-build here
的更多信息