运行 对导入 Foundation 的 objective-c 文件的 Clang 查询
Running Clang-query on objective-c files that import Foundation
我正在尝试使用 clang-query 运行 匹配导入 Foundation 但它不起作用的 obj-c 文件,在构建 clang-query
之后将其移动到 tools/extra
文件夹,我 运行 它使用此命令:
./clang-query MyClass.m -- -extra-arg-before "-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk"
但是我收到了这个错误:
fatal error: 'stdarg.h' file not found
#include <stdarg.h>
我应该如何 运行宁 clang-query
分析我的 objective-c 来源?
经过更多研究后,我发现正确的方法是使用基于 libTooling
的工具。如他们的文档所述:
Clang Tooling needs a compilation database to figure out specific build options for each file. Currently it can create a compilation database from the compile_commands.json file
对于Xcode个项目,这个文件可以这样生成:
xcodebuild -project PROJECT_NAME.xcodeproj | xcpretty -r json-compilation-database --output compile_commands.json
您将需要安装 xcpretty
gem。 (gem install xcpretty
)
来源:https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
更新:
如果像我一样,您遇到了从 xcodebuild 日志生成的 compile_commands.json
文件的问题,只需将此命令传递给您的二进制文件:
-mios-simulator-version-min=10.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.00/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks
您可能需要根据您的系统配置更新一些参数,但目前这对我来说工作正常。
我正在尝试使用 clang-query 运行 匹配导入 Foundation 但它不起作用的 obj-c 文件,在构建 clang-query
之后将其移动到 tools/extra
文件夹,我 运行 它使用此命令:
./clang-query MyClass.m -- -extra-arg-before "-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk"
但是我收到了这个错误:
fatal error: 'stdarg.h' file not found
#include <stdarg.h>
我应该如何 运行宁 clang-query
分析我的 objective-c 来源?
经过更多研究后,我发现正确的方法是使用基于 libTooling
的工具。如他们的文档所述:
Clang Tooling needs a compilation database to figure out specific build options for each file. Currently it can create a compilation database from the compile_commands.json file
对于Xcode个项目,这个文件可以这样生成:
xcodebuild -project PROJECT_NAME.xcodeproj | xcpretty -r json-compilation-database --output compile_commands.json
您将需要安装 xcpretty
gem。 (gem install xcpretty
)
来源:https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
更新:
如果像我一样,您遇到了从 xcodebuild 日志生成的 compile_commands.json
文件的问题,只需将此命令传递给您的二进制文件:
-mios-simulator-version-min=10.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.00/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks
您可能需要根据您的系统配置更新一些参数,但目前这对我来说工作正常。