使用Cmake 编译IOS 平台的代码,这个网上有很多很好的教程,这里就不在阐述了,但是编译教程大部分是编译C/C++的代码,然后链接库也是C/C++的静态库或者动态库。这里主要说明的在已经写好编译C/C++的CMake情况下,编译OC代码,以及链接OC库的情况。
这里详细描述了编译C/C++的代码流程:
https://blog.csdn.net/liny000/article/details/106527752
我们在使用Cmake编译Object C代码时,会遇到需要链接framework库的情况,首先简单说明一下,编译Cmake 编译OC代码时,需要增加指定的编译参数。
需要在Cmake文件中指定:
add_compile_options(-x objective-c++)
注意这部分编译参数,不能用CMAKE_C_FLAGS或CMAKE_CXX_FLAGS指定,因为这两个是针对C/C++代码的。
链接静态库.a 文件时候,我们仅仅需要和链接C/C++ 静态库.a 文件一样编写CMake即可。
链接framework 库时候,我们有两种方法可以链接库。
一种是使用find_library,示例代码如下:
find_library(AUDIO_UNIT AudioUnit)
if (NOT AUDIO_UNIT)
message(FATAL_ERROR "AudioUnit not found")
endif()
add_executable(program ${program_SOURCES})
target_link_libraries(program ${AUDIO_UNIT})
这时候会从系统内、link_directories(directory_to_framework_and_libs)、export CMAKE_INCLUDE_PATH=/XXXX 指定的路径中,搜索我们想要的AudioUnit.framework 库,然后编译连接。
一种是使用编译参数,示例代码如下:
target_link_libraries(program "-framework your_frame_work_name")
set_target_properties(program PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks")
这时候会从-Wl,-F指定的路径下,编译我们的your_frame_work_name.framework 库。
如果链接系统framework 库,我们仅需要指定如下编译参数即可:
set(CMAKE_EXE_LINKER_FLAGS "-framework Cocoa -framework AppKit -framework CoreData -framework Foundation")