iGa*_*mar 4 iphone code-analysis xcode5 xctool oclint
我正在使用以下命令将 oclint 与 xcode 5-
Step1:xcodebuild -target OClintDemo -configuration Debug -scheme OClintDemo -sdk iphonesimulator
Step2:OClintDemo jenkins$ xcodebuild -sdk iphonesimulator | tee xcodebuild.log
Step3: oclint-xcodebuild xcodebuild.log
Step4: oclint-json-compilation-database -- -o=report.html
但我得到 compile_commands.json 空文件,并且 report.html 包含以下 - OCLint 报告摘要:TotalFiles=0 FilesWithViolations=0 P1=0 P2=0 P3=0 [OCLint ( http://oclint.org ) v0.7 ]
小智 6
我找到了一种从 Xcode 项目生成 JSON 编译数据库而不依赖外部工具的方法。
依赖于处理xcodebuild
输出的工具均已弃用(oclint-xcodebuild、xctool)或最多有错误(xcpretty),因为输出格式是实现细节并且可能会发生变化。
以下方法在 macOS 12 Monterey 和Apple Silicon M1 Pro上使用Xcode 13.4.1进行了测试。
在 Xcode Build Settings 中,可以设置以下编译器标志:
OTHER_CFLAGS = $(inherited) -gen-cdb-fragment-path $(PROJECT_DIR)/CompilationDatabase
或者,可以在调用时传递该标志xcodebuild
:
xcrun xcodebuid clean build -project TestProject.xcodeproj -target TestTarget -configuration Debug OTHER_CFLAGS="\$(inherited) -gen-cdb-fragment-path \$(PROJECT_DIR)/CompilationDatabase"
这指示 clang 为每个编译发出编译数据库的片段。使用以下命令可以轻松地将这些片段组合到最终的编译数据库中:
sed -e '1s/^/[\'$'\n''/' -e '$s/,$/\'$'\n'']/' *.json > compile_commands.json
当然,建议验证片段,但如果没有外部工具,这是无法完成的。
有关编译器标志、片段验证和引用的完整详细信息,请查看要点:
从 Xcode 项目生成 JSON 编译数据库
Xcode 8 不支持 xctool,您可以使用xcpretty。你的 xcodebuild 命令应该是这样的
如果您正在使用工作区
xcodebuild -workspace WORKSPACE_NAME.xcworkspace -scheme SELECTED_SCHEME | xcpretty -r json-compilation-database --output compile_commands.json
Run Code Online (Sandbox Code Playgroud)
对于单个项目
xcodebuild -project PROJECT_NAME.xcodeproj | xcpretty -r json-compilation-database --output compile_commands.json
Run Code Online (Sandbox Code Playgroud)
这是我获得正确compile_commands.json
文件的方式(Xcode 8.3)
清理你的构建
xcodebuild clean -workspace WORKSPACE.xcworkspace/ -scheme "SCHEME"
这确保 xcodebuild 重新编译您的所有文件,然后使它们出现在编译数据库中。
构建并生成compile_commands.json:
xcodebuild -workspace WORKSPACE.xcworkspace/ -scheme "SCHEME" | xcpretty -r json-compilation-database -o compile_commands.json
您显然应该用您的项目值替换工作区和方案。您还可以使用-project
代替对项目运行此操作-workspace
。
小智 1
你试试这个脚本
#xctool oclint
xctool -workspace iWeidao.xcworkspace \
-scheme iWeidao \
-reporter json-compilation-database:compile_commands.json clean build
oclint-json-compilation-database -v oclint_args "-report-type html -o report.html -rc=LONG_LINE=120"
open compile_commands.json
open report.html
Run Code Online (Sandbox Code Playgroud)
这里 https://github.com/facebook/xctool/issues/270
归档时间: |
|
查看次数: |
4403 次 |
最近记录: |