如何设置CMake以构建iPhone的库

9

我正在尝试使用CMake手动设置某些属性来为iPhone生成Xcode配置。(这是正确的做法吗?)我的CMake文件如下:

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仍然设置为nothing,所以它说“当前Mac OS”。

其次,假设这是正确的方法,我如何仅为配置Debug-iPhone设置属性?


这个问题可能会有所帮助:https://dev59.com/W2cs5IYBdhLWcg3wtmSf - TomTasche
2个回答

11
据我所知,有两种方法。最可能的一种是使用CMAKE_OSX_SYSROOT来设置XCode SDKROOT。还有一个变量CMAKE_OSX_ARCHITECTURES,它映射到XCode中的ARCHS。
另一种选择是使用CMake的交叉编译支持。我没有在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/real文件定义了模拟器或真实 iPhone 编译工具的环境。

其他可能有帮助的链接包括这个错误报告这个邮件列表对话


我目前正在尝试您的第一个建议;我尝试了交叉编译,但无法将其定位到正确的架构(即使使用了正确的编译器-这很奇怪)。我在想-您如何找到像CMAKE_OSX_SYSROOT这样的变量?它甚至似乎不在列表中,更不用说有文档记录了。 - Jesse Beder
1
我个人是如何做到的呢?在这种情况下,我订阅了cmake邮件列表,并记得在那里看到一些关于iphone的讨论。其中一些变量也出现在缓存中,因此运行ccmake或高级模式下的GUI可能会给您一些提示。如果失败了,可以在cmake源代码上使用grep -r... - richq

2

以下信息也可能会有用:

该项目提供了一个简单的iOS工具链文件,可与CMake一起使用以构建库和设置应用程序。其中包括几个示例项目。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接