2009-04-27 13 views
10

Estoy tratando de usar CMake para generar una configuración de Xcode para el iPhone al configurar manualmente ciertos atributos. (? ¿Es esto de la manera correcta de ir sobre esto) Mi archivo CMake se parece a:Cómo configurar CMake para construir una biblioteca para el 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 

En primer lugar, esto no parece funcionar - en el proyecto de Xcode generada (Estoy corriendo cmake . -G Xcode) , SDKROOT aún está configurado en nada, por lo que dice "SO Mac actual".

En segundo lugar, suponiendo que esta sea la forma correcta de hacerlo, ¿cómo configuro el atributo solo para la configuración Debug-iPhone?

Respuesta

12

Por lo que puedo decir, hay dos formas. Lo más probable es que esté cerca de usar CMAKE_OSX_SYSROOT para configurar XCode SDKROOT. También está la variable CMAKE_OSX_ARCHITECTURES, que se asigna a ARCHS en XCode.

La alternativa es usar CMake's cross compiling support. No lo he usado para el iphone, pero lo he hecho para otros procesadores ARM. Es necesario establecer un archivo de conjunto de herramientas que se vería algo como esto:

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) 

Y luego al ejecutar cmake, establezca la variable CMAKE_TOOLCHAIN_FILE al nombre de su archivo de cadena de herramientas. O si solo compila en una arquitectura, puede codificar el valor en el archivo CMakeLists.txt. Pero imagino que tendrías que hacer una compilación cruzada para el simulador de iphone y para el propio iPhone, ¿verdad? Así que debe ejecutar uno de estos, probablemente, tener un par de variantes de construcción:

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

Cuando los archivos SIM/reales definen el entorno para el simulador o herramientas de compilación iPhone real.

Algunos otros enlaces que pueden ayudar son this bug report y this mailing list conversation.

+0

que estoy haciendo actualmente su primera sugerencia; Probé la compilación cruzada y no pude lograr que se centrara en la arquitectura correcta (a pesar de que usaba el compilador correcto, era extraño). Me pregunto, ¿cómo se encuentran variables como CMAKE_OSX_SYSROOT? Ni siquiera parece estar en una lista, mucho menos documentado. –

+1

¿Cómo lo hago personalmente? En este caso, estoy suscrito a la lista de correo de cmake y recuerdo haber visto un debate sobre el iPhone allí. Algunas de estas variables también aparecen en la memoria caché, por lo que ejecutar ccmake o la interfaz gráfica de usuario en modo avanzado puede darte algunas pistas. En su defecto, grep -r en el código fuente de cmake ... – richq

2

Esta información también puede ser útil:

Este proyecto proporciona un conjunto de herramientas simple de archivos IOS que puede ser utilizado con CMake para construir bibliotecas y aplicaciones de configuración. Se incluyen un par de proyectos de muestra.

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

Cuestiones relacionadas