web-dev-qa-db-ja.com

CMakeを使用したiOS用のコンパイル

CMakeをビルドツールとして使用してC++静的ライブラリをコンパイルしました。これを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)
14
Tal Zion

このツールチェーンファイルを使用するだけです: 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")
12
dreamzor

IOS.cmakeの2番目のバージョンは次の場所にあります。

https://ceres-solver.googlesource.com

注:iOS.cmakeの両方のバージョンがプロジェクトのx86バージョンのみをビルドする場合があります。 CMakeは、CMAKE_OSX_SYSROOTをシステムで使用可能な(最新の)Mac OS XSDKに設定するようになりました。 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
russes

私はかなり長い間iOSCMakeツールチェーンの更新バージョンを使用しています: https://github.com/leetal/ios-cmake

これにより、必要に応じて既存のiOSプロジェクトにドラッグできるXcodeプロジェクトが作成されます。

詳細をブログに投稿しました: https://blog.tomtasche.at/2019/05/how-to-include-cmake-project-in-xcode.html

0
TomTasche