2009-04-27 5 views
10

J'essaie d'utiliser CMake pour générer une configuration Xcode pour l'iPhone en définissant manuellement certains attributs. (? Est-ce même la voie à suivre à ce sujet) Mon fichier CMake ressemble:Comment configurer CMake pour créer une bibliothèque pour l'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 

D'abord, cela ne semble pas fonctionner - dans le projet Xcode généré (je suis en cours d'exécution cmake . -G Xcode) , SDKROOT est encore réglé sur rien, et donc il est dit "Current Mac OS". Deuxièmement, en supposant que c'est la bonne façon de faire cela, comment puis-je définir l'attribut uniquement pour la configuration? Debug-iPhone? Pour autant que je sache, il y a deux façons de le faire:

Répondre

12

Le plus probable, vous y êtes presque, est d'utiliser CMAKE_OSX_SYSROOT pour définir le SDKROOT XCode. Il y a aussi la variable CMAKE_OSX_ARCHITECTURES, qui correspond à ARCHS dans XCode.

L'alternative est d'utiliser CMake's cross compiling support. Je ne l'ai pas utilisé pour l'iphone, mais je l'ai fait pour d'autres processeurs ARM. Vous devez configurer un fichier toolchain qui ressemblerait à quelque chose comme ceci:

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) 

Et puis lorsque vous exécutez CMake, définissez la variable CMAKE_TOOLCHAIN_FILE au nom de votre fichier toolchain. Ou si vous compilez uniquement vers une architecture, vous pouvez coder en dur la valeur dans le fichier CMakeLists.txt. Mais j'imagine que vous auriez besoin de compiler croisé pour le simulateur d'iphone et pour l'iphone réel lui-même, non? Donc, vous exécutez l'un d'entre eux, ayant probablement deux ou trois variantes de construction:

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

Lorsque les fichiers/sim réels définissent l'environnement pour le simulateur ou les outils du compilateur iphone réel. Les autres liens qui peuvent aider sont this bug report et this mailing list conversation.

+0

que je fais actuellement votre première suggestion; J'ai essayé la compilation croisée et je n'ai pas réussi à cibler la bonne architecture (même si elle utilisait le bon compilateur - c'était bizarre). Je me demande - comment trouvez-vous des variables comme CMAKE_OSX_SYSROOT? Il ne semble même pas être dans une liste, et encore moins documenté. –

+1

Comment puis-je le faire personnellement? Dans ce cas, je suis abonné à la liste de diffusion cmake et je me souviens avoir vu une discussion sur iphone là-bas. Certaines de ces variables apparaissent également dans le cache, alors l'exécution de ccmake ou du gui en mode avancé peut vous donner quelques indications. A défaut, grep -r sur le code source de cmake ... – richq

2

Cette information peut aussi être utile:

Ce projet fournit un simple fichier toolchain iOS qui peut être utilisé avec CMake pour construire des bibliothèques et des applications de configuration. Quelques exemples de projets sont inclus.

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

Questions connexes