CMake似乎忽略了CMAKE_OSX_DEPLOYMENT_TARGET

Dan*_*olf 9 c++ xcode cmake

我在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(...
Run Code Online (Sandbox Code Playgroud)

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

cmake -G Xcode <path>
Run Code Online (Sandbox Code Playgroud)

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

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

难道我做错了什么?谷歌搜索问题没有给出任何最近的结果.

sak*_*kra 16

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

set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
Run Code Online (Sandbox Code Playgroud)

如果未明确设置为缓存变量,CMAKE_OSX_DEPLOYMENT_TARGET则由MACOSX_DEPLOYMENT_TARGET环境变量初始化.

像上面的赋值一样初始化缓存变量也会覆盖同一范围内同名的非缓存变量的值.

  • 那个有效。非常感谢!我不明白的是为什么需要缓存该值。我在 CMAKE_OSX_DEPLOYMENT_TARGET 的文档中没有发现任何提及。是否有我不知道的关于缓存的一般规则? (2认同)
  • 感谢您的解释。官方文档提到“如果没有明确设置,则该值由 MACOSX_DEPLOYMENT_TARGET 环境变量初始化”,但没有提到只有缓存的变量才被视为显式值。 (2认同)