CMake似乎忽略了CMAKE_OSX_DEPLOYMENT_TARGET

时间:2015-12-10 17:40:21

标签: 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(...

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

cmake -G Xcode <path>

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

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

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

2 个答案:

答案 0 :(得分:14)

变量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环境变量初始化。

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

答案 1 :(得分:0)

(我尝试将其添加为评论,但对于评论框来说太长了,所以我将其发布为答案,当然这确实是一个进一步的问题。)

在 Big Sur 下,我一直在尝试构建 DOSBox-X 的 SDL2 版本,将此字符串添加到项目中的所有 cmakelists.txt 文件中,添加的行始终位于 project() 行上方:

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

此线程中推荐使用字符串末尾的 FORCE(我尝试使用和不使用 FORCE。)

Why the CMAKE_OSX_DEPLOYMENT_TARGET not work when using cmake generate xcode project?

当我尝试在 Mojave 下运行生成的可执行文件时,出现此错误:

Dyld Error Message:
  Symbol not found: _objc_opt_class
  Referenced from: /Users/USER/Desktop/dosbox-x (which was built for Mac OS X 11.0)
  Expected in: /usr/lib/libobjc.A.dylib

DOSBox-X 使用 bash 脚本在 macOS 和 Linux 下构建。我在这里找不到任何解决方案,不知道是否有人有进一步的想法。