由于无法找到#import-ed 头文件,OCLint 报告编译器错误
Posted
技术标签:
【中文标题】由于无法找到#import-ed 头文件,OCLint 报告编译器错误【英文标题】:OCLint reports compiler errors due to its inability to find #import-ed header files 【发布时间】:2018-02-20 08:45:51 【问题描述】:我正在尝试集成 OCLint 0.13 来检查我基于 ObjC 的 ios 项目中的 lint 违规情况。
根据this guide,我在Xcode 中创建了一个聚合目标来运行xcodebuild clean build
,然后是oclint-xcodebuild
,以生成compile_commands.json
。我可以从生成的compile_commands.json
文件中运行clang
命令。但是,在oclint-json-compilation-database
命令生成的html 报告中,在处理NEORepos/Public/ResourceObservables/NEOAggregatedObservable.h
之类的文件时,我会看到类似'NEOObservables/NEOObservable.h' file not found
的编译器错误,即使所述头文件存在于NEOObservables/Public/Observables/NEOObservable.h
。。 p>
我怎样才能摆脱这些阻止我的一些源文件被检查的编译器错误?
从compile_commands.json
运行 clang 命令会生成.o
文件,但 OCLint 似乎无法使用 json 文件进行编译。
我还尝试添加更多 -I
包含路径,但没有帮助。欢迎所有建议和指点。
这是一段(编辑过的)日志……
xcode_clean_build_command = xcodebuild -workspace 'Neo.xcworkspace' -scheme 'NeoSampleApp' -configuration 'Debug' clean build -dry-run -derivedDataPath /Users/username/Documents/git/ios-neo_linter/build/Neo -sdk iphonesimulator CLANG_ENABLE_MODULE_DEBUGGING=NO CODE_SIGNING_ALLOWED=NO CODE_SIGN_IDENTITY='' CODE_SIGNING_REQUIRED=NO ENABLE_BITCODE=NO COMPILER_INDEX_STORE_ENABLE=NO | tee xcodebuild.log
...
/oclint-xcodebuild
...
生成 compile_commands.json ...
选择 NEORepos/Public/ResourceObservables/NEOAggregatedObservable.m 选择 NeoSampleApp/main.m
...
用于 linting 的入围文件(283 个中的 2 个)和创建新的 compile_commands.json
...
编译 /Users/username/Documents/git/ios-neo_linter/NEORepos/Public/ResourceObservables/NEOAggregatedObservable.m - 失败 编译 /Users/username/Documents/git/ios-neo_linter/NeoSampleApp/main.m - 成功 分析 /Users/username/Documents/git/ios-neo_linter/NeoSampleApp/main.m - 完成
...
正在生成 lint 报告(如果有)...
...
执行命令:oclint-json-compilation-database -e Pods -v -- -list-enabled-rules -no-analytics -enable-global-analysis -verbose --report-type html -o oclint.html - extra-arg=-Wno-everything
...
/usr/local/bin/oclint -p /Users/username/Documents/git/ios-neo_linter -list-enabled-rules -no-analytics -enable-global-analysis -verbose --report-type html - o oclint.html -extra-arg=-Wno-everything /Users/username/Documents/git/ios-neo_linter/NEORepos/Public/ResourceObservables/NEOAggregatedObservable.m /Users/username/Documents/git/ios-neo_linter/NeoSampleApp/ main.m
【问题讨论】:
【参考方案1】:编译器错误是由于我使用的-dry-run
标志造成的。由于它是在试运行,它没有创建需要的 .hmap
文件(至少不在正确的位置),从而导致 <blah>.h file not found
错误。
但是,如果没有-dry-run
,我将不得不进行完整的构建,这对我来说是不可接受的。如果我找到具有最佳性能的解决方案,将更新。
【讨论】:
以上是关于由于无法找到#import-ed 头文件,OCLint 报告编译器错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Visual Studio 编译器无法找到某些头文件而 intellisense 可以?