Согласно этому посту я указал CMAKE_OSX_DEPLOYMENT_TARGET в своем CMake следующим образом:
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)
и запустите CMake с генератором XCode.
В MacOS это генерирует правильный MACOSX_DEPLOYMENT_TARGET в проекте XCode, но в iOS это не имеет никакого эффекта и IPHONEOS_DEPLOYMENT_TARGET = 11.0 генерируется в проекте XCode, хотя согласно документации это также должно применяться к 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.
Установка записи кэша по умолчанию НЕ перезаписывает существующее значение. Вы уверены, что переменная кэша еще не определена? Или добавление FORCE к утверждениям set будет иметь какое-то значение?
Независимо от моего комментария выше, вы уверены, что не существует нормальной переменной с тем же именем, которая затеняет переменную кэша?
@gordan.sikic Я пытался установить CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET как кэшируемый и необналичиваемый отдельно (комментируя одну строку и раскомментируя другую)
Не используйте скриншоты. Все это можно скопировать в виде текста: Meta.stackoverflow.com/questions/285551/…





Ваш код не будет работать, переменную IOS нельзя использовать до вызова проекта. Оно всегда будет ложным.
Вызов проекта отвечает за очень многое. Стоит понять, что он делает, чтобы вы могли рассуждать об этих сценариях. При вызове проекта CMake окончательно определяет целевую платформу, компиляторы и т. д.
Вам нужно будет создать файл цепочки инструментов, в котором будут указаны CMAKE_SYSTEM_NAME и CMAKE_OSX_DEPLOYMENT_TARGET.
Пример:
# Name this file iOS.cmake
set(CMAKE_SYSTEM_NAME "iOS")
set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum iOS deployment version" FORCE)
Затем вы можете использовать этот файл следующим образом:
cmake -S . -B build/ -D CMAKE_TOOLCHAIN_FILE=iOS.cmake
CMAKE_SYSTEM_NAME по какой-то причине пуст в моей среде, в обновленном сообщении я предоставил свой код CMake.
Из документации CMake cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS. cmake.org/cmake/help/latest/manual/…. Вам необходимо установить CMAKE_SYSTEM_NAME.
Я перезапустил QT Creator и получил CMAKE_SYSTEM_NAME=iOS
Я сделал MR для CMake, чтобы помочь уточнить документацию для IOS, чтобы помочь пользователям в будущем: gitlab.kitware.com/cmake/cmake/-/merge_requests/9491
@AlexeyStarinsky, пожалуйста, проигнорируйте мой предыдущий совет. Я по-прежнему прав в том, что ваше предыдущее использование переменной IOS было неправильным. Посмотрите это обсуждение gitlab.kitware.com/cmake/cmake/-/merge_requests/…
Я обновил ответ после разговора с различными сопровождающими CMake.
Я думаю, что установка переменных окружения
MACOSX_DEPLOYMENT_TARGETилиIPHONEOS_DEPLOYMENT_TARGET, вероятно, сработает.