【问题标题】:CMake seems to ignore CMAKE_OSX_DEPLOYMENT_TARGETCMake 似乎忽略了 CMAKE_OSX_DEPLOYMENT_TARGET
【发布时间】:2016-03-16 11:17:24
【问题描述】:

我在 OS X 10.10.5 上使用 CMake 3.3.2 和 Xcode 7.1。

我有一个使用 CMake 的小型 C++ 项目。我希望它在 OS X 10.9 或更高版本上运行。所以我修改了我的 CMakeLists.txt 以开始:

cmake_minimum_required(VERSION 3.3)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9")

project(...

然后我像这样创建 Xcode 项目:

cmake -G Xcode <path>

但是,生成的 xcodeproj 包似乎没有设置部署目标。当我在文本编辑器中打开包含的 project.pbxproj 文件时,没有提到 MACOSX_DEPLOYMENT_TARGET 的行。

因此,当我在 Xcode 中打开项目时,在 Build Settings > Deployment > OS X Deployment Target 下,无论我在 CMakeLists.txt 中指定什么,Xcode 始终显示默认值“OS X 10.11”。当我在 Xcode 中手动更改设置,然后在文本编辑器中重新打开项目文件时,MACOSX_DEPLOYMENT_TARGET = 10.9; 行已正确添加。

我做错了吗?谷歌搜索这个问题没有给出任何最近的结果。

【问题讨论】:

    标签: c++ xcode cmake


    【解决方案1】:

    变量CMAKE_OSX_DEPLOYMENT_TARGET 必须在第一个project() 命令之前初始化为缓存变量,以便正确获取Xcode 项目生成:

    set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
    

    如果没有明确设置为 cache 变量,CMAKE_OSX_DEPLOYMENT_TARGET 将由 MACOSX_DEPLOYMENT_TARGET 环境变量初始化。

    像上面赋值中的缓存变量的初始化也会覆盖相同范围内同名的非缓存变量的值。

    【讨论】:

    • 那行得通。非常感谢!我不明白的是为什么需要缓存该值。我在 CMAKE_OSX_DEPLOYMENT_TARGET 的文档中没有找到任何提及。是否有我不知道的关于缓存的一般规则?
    • 感谢您的解释。官方文档提到“如果没有显式设置值由 MACOSX_DEPLOYMENT_TARGET 环境变量初始化”,但没有提到只有缓存的变量被视为显式值。
    猜你喜欢
    • 2015-06-25
    • 2021-10-28
    • 2016-09-30
    • 2014-02-03
    • 2012-03-11
    • 2013-09-07
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多