You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

但得到如下输出:
CMake输出:CMAKE_SYSTEM_NAME为Darwin,部署目标设为11.0

重启QT Creator后运行CMake,得到正确的结果:
CMake输出:CMAKE_SYSTEM_NAME为iOS,部署目标设为14.0

但删除构建文件并重新运行干净的CMake后,问题再次出现:
CMake输出:CMAKE_SYSTEM_NAME为Darwin,部署目标设为11.0

QT Creator中指定了以下OSX属性:
QT Creator中的OSX属性设置:部署目标14.0,架构arm64

但未指定CMAKE_SYSTEM_NAME变量。


内容的提问来源于stack exchange,提问作者Alexey Starinsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:43:16