Cmake 编译Object C 链接framework库

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容