【问题标题】:Compiling for iOS with CMake使用 CMake 为 iOS 编译
【发布时间】:2012-09-19 19:19:15
【问题描述】:

我使用 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)

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

set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_SYSTEM_PROCESSOR arm)

【问题讨论】:

    标签: c++ ios compilation cmake arm


    【解决方案1】:

    只需使用此工具链文件: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")
    

    【讨论】:

    • 不适用于 cmake 2.8.11 错误:CMake 错误:找不到 cmake 模块文件:/Users/leanidchaika/job/lge/build/CMakeFiles/2.8.11.2/CMakeCCompiler.cmake CMake 错误:找不到cmake模块文件:/Users/leanidchaika/job/lge/build/CMakeFiles/2.8.11.2/CMakeCXXCompiler.cmake
    • 这里是链接工具链的一个较新的分支:github.com/cristeab/ios-cmake 我遇到了一些旧版本的错误,这些错误已在此修复中
    • 在 GitHub 上找到 even newer fork1K+ 星!!
    【解决方案2】:

    通过关注cmake-toolchains 文档,我确实喜欢以下内容:

    cmake -G Xcode -B build \
        -DCMAKE_SYSTEM_NAME=iOS \
        -DCMAKE_Swift_COMPILER_FORCED=true \
        -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
    

    注意:CMAKE_OSX_DEPLOYMENT_TARGET=11.0 的赋值并不是针对 iOS 的错误。

    【讨论】:

    • 我正在使用 coturn master 作为 Turn 客户端库。我已成功生成 cmake 构建,但文件 libturnutils.a 与 mac os 兼容。我应该进行哪些更改以使其与 ios 兼容?
    【解决方案3】:

    我使用 iOS CMake 工具链的更新版本已经有一段时间了:https://github.com/leetal/ios-cmake

    这将创建一个 Xcode 项目,如果需要,您可以将其拖到现有的 iOS 项目中。

    我写了一篇更详细的博文:https://blog.tomtasche.at/2019/05/how-to-include-cmake-project-in-xcode.html

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-21
        • 2021-09-14
        • 2014-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        相关资源
        最近更新 更多