2009-04-27 3 views
10

Я пытаюсь использовать CMake для создания конфигурации Xcode для iPhone, вручную устанавливая определенные атрибуты. (? Является ли это даже правильный путь идти об этом) Мой файл 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 все еще настроен ни к чему, и поэтому он говорит «Текущая Mac OS».

Во-вторых, если это правильный способ сделать это, как мне установить атрибут только для конфигурации Debug-iPhone?

ответ

12

Насколько я могу судить, существует два пути. Скорее всего, вы почти там, это использовать CMAKE_OSX_SYSROOT, чтобы установить XCode SDKROOT. Существует также переменная CMAKE_OSX_ARCHITECTURES, которая отображает ARCHS в XCode.

Альтернативой является использование CMake's cross compiling support. Я не использовал его для iphone, но я сделал это для других процессоров ARM. Вам нужно настроить ToolChain файл, который будет выглядеть примерно так:

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 на имя файла ToolChain. Или, если вы только скомпилируете одну архитектуру, вы можете жестко закодировать значение в файле CMakeLists.txt. Но я предполагаю, что вам нужно будет скомпилировать для симулятора iphone и для самого самого iphone, верно? Таким образом, вы бы запустить один из них, вероятно, имея несколько вариантов сборки:

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

Где сим/реальные файлы определяют условия для симулятора или компиляторов реального iPhone.

Некоторые другие ссылки, которые могут помочь, это this bug report и this mailing list conversation.

+0

Я в настоящее время делает свое первое предложение; Я попробовал перекрестное компиляцию и не смог заставить его настроить правильную архитектуру (хотя он использовал правильный компилятор - это было странно). Мне интересно - как вы находите переменные, такие как CMAKE_OSX_SYSROOT? Это даже не похоже на список, не говоря уже о документах. –

+1

Как я лично это делаю? В этом случае я подписываюсь на список рассылки cmake, и я помню, что некоторые обсуждения об iphone там. Некоторые из этих переменных также отображаются в кеше, поэтому запуск ccmake или gui в расширенном режиме может дать вам некоторые подсказки. В противном случае grep -r на исходном коде cmake ... – richq

2

Эта информация также может быть полезно:

Этот проект предоставляет простой файл ToolChain IOS, которые могут быть использованы с CMake для создания библиотек и приложений установки. Включено несколько типовых проектов.

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