CMAKE_OSX_DEPLOYMENT_TARGET在iOS环境下不生效的问题求助
问题:CMake设置iOS部署目标无效,MacOS环境正常
参考相关内容后,我在CMake中按如下方式指定CMAKE_OSX_DEPLOYMENT_TARGET:
cmake_minimum_required(VERSION 3.21.3) if (APPLE) #The variable CMAKE_OSX_DEPLOYMENT_TARGET must initialized as a cache variable prior to the first project() command if(IOS) set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum iOS deployment version") else() set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "Minimum MacOS deployment version") endif() endif() project(MyApp LANGUAGES CXX)
使用Xcode生成器运行CMake时,MacOS环境下Xcode项目中生成的MACOSX_DEPLOYMENT_TARGET值正确,但iOS环境下该设置无效果,生成的IPHONEOS_DEPLOYMENT_TARGET = 11.0。根据CMake官方文档,CMAKE_OSX_DEPLOYMENT_TARGET变量应同样适用于iOS平台。
环境信息:CMake版本3.29.2,Xcode版本15.3。
编辑1
尝试将CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET设置为缓存变量和非缓存变量:
set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0" CACHE STRING "Workaround for minimum iOS deployment version") set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0")
但以上两种设置均无效,唯一有效的解决办法是直接针对目标设置属性:
set_target_properties(${PROJECT_NAME} PROPERTIES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0")
编辑2
尝试了答案中的代码:
if (APPLE) # The variable CMAKE_OSX_DEPLOYMENT_TARGET must initialized as a cache variable prior to the first project() command # Your code won't work the variable IOS cannot be used before the project call. It will always be false. # You must use the CMAKE_SYSTEM_NAME instead message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") if(CMAKE_SYSTEM_NAME STREQUAL "iOS") #Does not take an effect, the workaround is setting XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET. set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum iOS deployment version") else() set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "Minimum MacOS deployment version") endif() message("CMAKE_OSX_DEPLOYMENT_TARGET has been set to ${CMAKE_OSX_DEPLOYMENT_TARGET}") endif()
但得到如下输出:
重启QT Creator后运行CMake,得到正确的结果:
但删除构建文件并重新运行干净的CMake后,问题再次出现:
QT Creator中指定了以下OSX属性:
但未指定CMAKE_SYSTEM_NAME变量。
内容的提问来源于stack exchange,提问作者Alexey Starinsky
相关产品推荐
相关产品推荐

