2009-04-27 60 views
10

我試圖使用CMake通過手動設置某些屬性來爲iPhone生成Xcode配置。 (?這甚至去了解這個正確的方式)我的CMake文件看起來像:如何設置CMake爲iPhone構建庫

project(MYLIB) 
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 
set(CMAKE_CONFIGURATION_TYPES Debug Release Debug-iPhone) 
set(FILES list of my files...) 

add_library(mylib FILES) 

set(XCODE_ATTRIBUTE_SDKROOT iphoneos2.2.1) 
# more attributes later, I'm just trying to get one to work first 

首先,這似乎並沒有工作 - 在生成的Xcode項目(我運行cmake . -G Xcode) ,SDKROOT仍然沒有設置,因此它會顯示「Current Mac OS」。

其次,假設這是正確的方式來做到這一點,我該如何設置僅用於配置Debug-iPhone的屬性?

回答

12

據我所知,有兩種方法。最有可能的,你幾乎在那裏,是使用CMAKE_OSX_SYSROOT來設置XCode SDKROOT。還有變量CMAKE_OSX_ARCHITECTURES,它映射到XCode中的ARCHS。

另一種方法是使用CMake's cross compiling support。我沒有使用它的iPhone,但我已經爲其他ARM處理器。你需要建立一個工具鏈文件,這會是這個樣子:

set(CMAKE_SYSTEM_NAME Generic) 
set(CMAKE_SYSTEM_VERSION 1) 
set(CMAKE_SYSTEM_PROCESSOR arm-elf) 
set(CMAKE_C_COMPILER /path/to/complier/bin/arm-elf-gcc) 
set(CMAKE_FIND_ROOT_PATH /path/to/compiler) 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 

然後當你運行cmake,該CMAKE_TOOLCHAIN_FILE變量設置爲你的工具鏈文件的名稱。或者,如果您只編譯爲一種體系結構,則可以在CMakeLists.txt文件中對該值進行硬編碼。但我想你需要交叉編譯的iPhone模擬器和實際的iPhone本身,對不對?所以,你會運行其中之一,可能有一對夫婦構建變種:

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/my/iphone-sim.cmake . 
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/my/iphone-real.cmake . 

凡SIM /實際文件定義模擬器或真正的iphone編譯工具環境。

其他一些可能有用的鏈接是this bug reportthis mailing list conversation

+0

目前我做你的第一個建議;我嘗試了交叉編譯,無法將它定位到正確的體系結構(即使它使用了正確的編譯器 - 這是奇怪的)。我想知道 - 你如何找到像CMAKE_OSX_SYSROOT這樣的變量?它似乎甚至不在列表中,更不用說記錄了。 – 2009-04-30 04:25:19

2

此信息也可能是有用的:

這個項目提供了可與CMake的可用於建庫和設置應用程序的簡單的iOS工具鏈文件。包括一些示例項目。

http://code.google.com/p/ios-cmake/