我使用CMake作为构建工具编译了一个C ++静态库,我想将它链接到我的iOS应用程序。
我在Xcode中创建了一个简单的“Empty”应用程序,并将我的库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)
答案 0 :(得分:11)
只需使用此工具链文件: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")
答案 1 :(得分:3)
通过遵循cmake-toolchains文档,我的操作如下:
cmake -G Xcode -B build \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_Swift_COMPILER_FORCED=true \
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
注意:在定位iOS时,分配CMAKE_OSX_DEPLOYMENT_TARGET=11.0
并不是错误。
答案 2 :(得分:2)
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 ( )
答案 3 :(得分:1)
一段时间以来,我一直在使用iOS CMake工具链的更新版本:https://github.com/leetal/ios-cmake
这将创建一个Xcode项目,您可以根据需要将其拖到现有的iOS项目中。
我写了一篇博客文章,提供更多详细信息:https://blog.tomtasche.at/2019/05/how-to-include-cmake-project-in-xcode.html