2012-09-27 99 views
10

我已经使用CMake作为我的构建工具编译了一个C++静态库,并且我想将它链接到我的iOS应用程序。
我在Xcode中创建了一个简单的'Empty'应用程序,并将名为libengine.a的库链接到它。
我试图编译我的iOS项目和链接给了我这样的警告:
用CMake为iOS编译

ignoring file /Users/.../build/engine/libengine.a, 
file was built for archive which is not the architecture being linked (i386): 
/Users/.../build/engine/libengine.a 

据我了解,我需要编译我的图书馆ARM处理器。问题是我不知道如何。
我认为CMake真的缺乏好的教程。
无论如何,我的CMake脚本附在下面。

任何帮助将不胜感激。
谢谢,塔尔。

这里是我的主要CMake的脚本:

cmake_minimum_required(VERSION 2.8) 

project(movie-night) 

if (DEFINED PLATFORM) 
    include(toolchains/ios.cmake) 
endif() 

add_definitions(-Wall) 

set(DEBUG) 

if (DEFINED DEBUG) 
    add_definitions(-g) 
endif() 

if (DEFINED RELEASE) 
    add_definitions(-O3) 
endif() 

add_subdirectory(engine) 
add_subdirectory(ui) 

add_subdirectory(test) 

这里是我的工具链/ ios.cmake文件:

set(CMAKE_SYSTEM_NAME Darwin) 
set(CMAKE_SYSTEM_PROCESSOR arm) 

回答

9

只要使用这个工具链文件:http://code.google.com/p/ios-cmake/,并把它作为

cmake -DCMAKE_TOOLCHAIN_FILE=path_to_your_toolchain_file 

然后,在CMakeLists.txt

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch armv7") 
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch armv7") 
+0

不适用于cmake的2.8.11错误:CMake的错误:无法找到cmake的模块文件:/用户/ leanidchaika /工作/你可以通过注释掉几行你iOS.cmake复印件做到这一点lge/build/CMakeFiles/2.8.11.2/CMakeCCompiler.cmake CMake错误:无法找到cmake模块文件:/Users/leanidchaika/job/lge/build/CMakeFiles/2.8.11.2/CMakeCXXCompiler.cmake –

+1

这里有一点更新链接工具链的叉子:https://github.com/cristeab/ios-cmake 我遇到了一些与旧版本已修复此错误的错误 –

2

有位于iOS.cmake的第二个版本:

https://ceres-solver.googlesource.com

注意:您可能会发现,iOS.cmake的两个版本将只建项目的86版本。 CMake现在将CMAKE_OSX_SYSROOT设置为系统上可用的(最新)Mac OS X SDK。您可以通过修改您的iOS.cmake副本来始终设置CMAKE_OSX_SYSROOT来解决此问题。

# -- Under CMake 3.4.2, CMAKE_OSX_SYSROOT is automatically defined to point to the latest Mac OS X SDK. -- 
# -- So, the iOS SDK is never found. Grab the correct CMAKE_OS_SYSROOT and ignore any prior setting. -- 

# If user did not specify the SDK root to use, then query xcodebuild for it. 
# if (NOT CMAKE_OSX_SYSROOT) 
    execute_process(COMMAND xcodebuild -version -sdk ${XCODE_IOS_PLATFORM} Path 
    OUTPUT_VARIABLE CMAKE_OSX_SYSROOT 
    ERROR_QUIET 
    OUTPUT_STRIP_TRAILING_WHITESPACE) 
    message (STATUS "Using SDK: ${CMAKE_OSX_SYSROOT} for platform: ${IOS_PLATFORM}") 
    message (STATUS "be sure the previous line points to the correct SDK") 
# endif ()