CMake似乎忽略了CMAKE_OSX_DEPLOYMENT_TARGET。

22

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

我有一个使用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 bundle似乎没有设置部署目标。当我在文本编辑器中打开包含的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;已经正确添加。

我做错了什么吗?在Google上搜索这个问题并没有得到任何最近的结果。

1个回答

37

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

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

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

像上面的赋值语句中初始化缓存变量也会覆盖同一作用域内同名的非缓存变量的值。


2
可以了,非常感谢!但是我不太明白为什么需要缓存这个值。在CMAKE_OSX_DEPLOYMENT_TARGET的文档中没有找到任何提及。我是否有所不知,关于缓存有什么通用规则吗? - Daniel Wolf
2
感谢您的解释。官方文档提到“如果没有明确设置,则该值将由MACOSX_DEPLOYMENT_TARGET环境变量初始化”,但未提及只有缓存变量被视为明确值。 - Daniel Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接