这与我之前的问题密切相关,该问题是关于使用CMake在iPhone上构建静态库.我得到了工作设置CMAKE_OSX_SYSROOT.
但是,这不适用于构建应用程序.我CMakeLists.txt看起来像:
project(TEST)
set(CMAKE_OSX_SYSROOT iphoneos2.2.1)
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)")
set(CMAKE_EXE_LINKER_FLAGS
"-framework Foundation -framework OpenGLES -framework AudioToolbox -framework CoreGraphics -framework QuartzCore -framework UIKit -framework OpenAL"
)
set(SRC --my files--)
add_executable(iphone-test MACOSX_BUNDLE ${SRC})
Run Code Online (Sandbox Code Playgroud)
几点说明:
-framework链接选项,因为它find_library不适用于所有框架(它找到了大部分框架,但没有找到OpenGLES).我不明白为什么,因为他们都在同一个文件夹中${SDK}/System/Library/Frameworks.这让我相信我做错了什么,但我不知道是什么.MACOSX_BUNDLE到add_executable命令中,以便生成的产品类型com.apple.product-type.application代替com.apple.product-type.tool,而iPhone上显然不存在.在任何情况下,应用程序编译和链接正确,但当我在模拟器中运行它时,我得到了可怕的
Failed to launch simulated application: Unknown error.
Run Code Online (Sandbox Code Playgroud)
google和stackoverflow上有很多报告此问题的实例,但所有解决方案都涉及清理或创建新项目和移动文件; 但是我在CMake完成它的工作后正在编译一份新的副本,所以这些都不适用.
我在CMake邮件列表上找到了这个帖子,但它只报告了构建库的成功,然后逐渐消失.
我使用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
Run Code Online (Sandbox Code Playgroud)
据我所知,我需要为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)
Run Code Online (Sandbox Code Playgroud)
这是我的toolchains/ios.cmake文件:
set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_SYSTEM_PROCESSOR arm)
Run Code Online (Sandbox Code Playgroud)