CMAKE_OSX_DEPLOYMENT_TARGET 对 iOS 不生效

问题描述 投票:0回答:1

根据这篇文章我在我的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,它没有效果,并且在 XCode 项目中生成
IPHONEOS_DEPLOYMENT_TARGET = 11.0
,而根据 docs,它也应该适用于 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")
ios xcode macos cmake
1个回答
0
投票

您的代码将无法工作,变量 IOS 在项目调用之前无法使用。它永远是假的。

您必须改用 CMAKE_SYSTEM_NAME。请参阅有关 iOS

交叉编译的文档
cmake_minimum_required(VERSION 3.21.3)

if (APPLE)
    set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "Minimum MacOS deployment version")
    if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
        set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum iOS deployment version")
    else()
endif()

project(MyApp LANGUAGES CXX)

# Once the project call happens then you can use the IOS variable
if (IOS)
    message(STATUS "IOS")
endif()

项目调用的责任相当大。值得了解它的作用,以便您可以推理这些场景。项目调用是 CMake 最终确定您的目标平台、编译器等的地方。

© www.soinside.com 2019 - 2024. All rights reserved.