Компиляция для iOS с CMake

Я скомпилировал статическую библиотеку C ++, используя CMake в качестве инструмента для сборки, и я хочу связать ее с моим приложением для iOS.
Я создал простое «пустое» приложение в Xcode и связал с ним свою библиотеку libengine.a.
Я попытался скомпилировать свой проект 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)

Вот мой файл toolchains / ios.cmake:

set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_SYSTEM_PROCESSOR arm)

10

Решение

Просто используйте этот набор инструментов: 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")
10

Другие решения

Существует вторая версия iOS.cmake, расположенная по адресу:

https://ceres-solver.googlesource.com

Примечание: вы можете обнаружить, что обе версии iOS.cmake будут собирать только x86 версии вашего проекта. CMake теперь устанавливает CMAKE_OSX_SYSROOT на (последний) Mac OS X SDK, доступный в вашей системе. Вы можете исправить это, изменив свою копию iOS.cmake, чтобы всегда устанавливать CMAKE_OSX_SYSROOT. Вы можете сделать это, закомментировав пару строк вашей копии iOS.cmake:

# -- 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 ( )
2

По вопросам рекламы [email protected]