2015-12-10 177 views
1

我在OS X 10.10.5上使用CMake 3.3.2和Xcode 7.1。CMake似乎忽略CMAKE_OSX_DEPLOYMENT_TARGET

我有一個使用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;

我做錯了什麼?谷歌搜索這個問題沒有給出任何最近的結果。

回答

6

變量CMAKE_OSX_DEPLOYMENT_TARGET必須按順序先於第一project()命令初始化爲緩存變量的Xcode的項目生成到正確回升:

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

如果沒有明確設定爲緩存變量CMAKE_OSX_DEPLOYMENT_TARGETMACOSX_DEPLOYMENT_TARGET環境變量初始化。

類似於上述賦值中的緩存變量的初始化還將覆蓋同一範圍內的相同名稱的非緩存變量的值。

+0

這是有效的。非常感謝!我不明白的是爲什麼這個值需要被緩存。我在CMAKE_OSX_DEPLOYMENT_TARGET的文檔中沒有發現任何提及。有沒有關於我不知道的緩存的一般規則? –

+0

@DanielWolf查看更新的答案。 – sakra

+0

感謝您的解釋。官方文檔提到,「如果沒有明確地設置該值是由MACOSX_DEPLOYMENT_TARGET環境變量初始化的」,但沒有提及只有一個緩存變量被視爲一個顯式值。 –