使用Xcode 9为iOS编译Ceres时遇到问题
我之前也碰到过几乎一模一样的情况,CMake 3.11系列的候选版本确实在AppleClang的版本检测上有点滞后,尤其是对Xcode 9.x自带的clang支持不够完善。结合我的踩坑经验,给你几个可行的解决方向:
强制指定编译器路径
直接在CMake命令里明确指定Xcode自带的clang路径,跳过自动检测环节,这是最直接的办法。命令示例如下:cmake -G Xcode \ -DCMAKE_C_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \ -DCMAKE_CXX_COMPILER=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ \ -DCMAKE_OSX_SYSROOT=iphoneos \ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.0 \ -DCERES_BUILD_EXAMPLES=OFF \ # 根据你的需求添加其他Ceres配置参数 <你的Ceres源码路径>修正Ceres的CMake检测逻辑
Ceres 1.13.0的CMake配置里,可能还没适配Xcode 9对应的AppleClang 9.x版本。你可以找到Ceres源码中cmake目录下的FindAppleClang.cmake或者类似的编译器检测文件,把里面的版本判断上限调高。比如把原本限制VERSION_LESS 8.0的判断改成VERSION_LESS 10.0,或者直接移除不必要的版本限制,让CMake能正确识别更高版本的AppleClang。升级到正式版CMake
3.11.0-rc3是候选发布版本,本身可能存在一些未修复的兼容性bug。建议升级到CMake 3.12及以上的正式版本,后续版本针对AppleClang和Xcode 9的适配做了不少优化,基本能解决自动检测的问题。检查Xcode命令行工具配置
先确认系统默认的Xcode命令行工具是你正在使用的Xcode 9.2:xcode-select --switch /Applications/Xcode.app/Contents/Developer有时候系统会残留旧版本的命令行工具配置,导致CMake找不到正确的clang路径。
如果还是有问题,可以运行cmake --debug-output查看详细的编译器检测日志,定位到底是哪一步识别失败,再针对性调整配置。
内容的提问来源于stack exchange,提问作者Rick

