C++ CMake似乎忽略了CMake\u OSX\u部署\u目标

C++ CMake似乎忽略了CMake\u OSX\u部署\u目标,c++,xcode,cmake,C++,Xcode,Cmake,我正在OS X 10.10.5上使用CMake 3.3.2和Xcode 7.1 我有一个使用CMake的小C++项目。我希望它在OSX10.9或更高版本上运行。因此,我修改了我的CMakeLists.txt,使其看起来像这样: cmake_minimum_required(VERSION 3.3) set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9") project(... 然后我像这样创建Xcode项目: cmake -G Xcode <path>

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

我有一个使用CMake的小C++项目。我希望它在OSX10.9或更高版本上运行。因此,我修改了我的CMakeLists.txt,使其看起来像这样:

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

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

cmake -G Xcode <path>
cmake-gxcode
但是,生成的xcodeproj包似乎没有设置部署目标。当我在文本编辑器中打开包含的project.pbxproj文件时,没有一行提到
MACOSX\u DEPLOYMENT\u TARGET

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

我做错什么了吗?谷歌搜索该问题没有给出任何最新结果。

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

set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
如果未明确设置为缓存变量,
CMAKE\u OSX\u DEPLOYMENT\u TARGET
MACOSX\u DEPLOYMENT\u TARGET
环境变量初始化

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

(我试图将其添加为注释,但注释框太长,因此我将其作为答案发布,当然这是一个进一步的问题。)

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

set(CMAKE\u OSX\u部署\u目标“10.12”缓存字符串“最小OS X部署版本”强制)

在这个线程中,建议使用字符串末尾的
FORCE
(我尝试了使用和不使用
FORCE

当我尝试在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下构建。我在这里找不到任何解决方案,我想知道是否有人有进一步的想法。

这很有效。谢谢!但我不明白的是为什么需要缓存该值。我在CMAKE_OSX_部署_目标的文档中没有发现任何提及。关于缓存是否有我不知道的一般规则?谢谢您的解释。官方文档提到“如果没有显式设置,则该值由MACOSX_部署_目标环境变量初始化”,但没有提到只有缓存的变量被视为显式值。