xcodebuild 生成空的 compile_commands.json

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-xcodebuildxctool)或最多有错误(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 编译数据库


abd*_*lek 5

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)


nen*_*hev 5

这是我获得正确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