使用Cmake 編譯IOS 平臺(tái)的代碼绿饵,這個(gè)網(wǎng)上有很多很好的教程灿里,這里就不在闡述了凿叠,但是編譯教程大部分是編譯C/C++的代碼厘擂,然后鏈接庫(kù)也是C/C++的靜態(tài)庫(kù)或者動(dòng)態(tài)庫(kù)答倡。這里主要說(shuō)明的在已經(jīng)寫(xiě)好編譯C/C++的CMake情況下,編譯OC代碼驴党,以及鏈接OC庫(kù)的情況。
這里詳細(xì)描述了編譯C/C++的代碼流程:
https://blog.csdn.net/liny000/article/details/106527752
我們?cè)谑褂肅make編譯Object C代碼時(shí)获茬,會(huì)遇到需要鏈接framework庫(kù)的情況港庄,首先簡(jiǎn)單說(shuō)明一下倔既,編譯Cmake 編譯OC代碼時(shí),需要增加指定的編譯參數(shù)鹏氧。
需要在Cmake文件中指定:
add_compile_options(-x objective-c++)
注意這部分編譯參數(shù)渤涌,不能用CMAKE_C_FLAGS或CMAKE_CXX_FLAGS指定,因?yàn)檫@兩個(gè)是針對(duì)C/C++代碼的把还。
鏈接靜態(tài)庫(kù).a 文件時(shí)候实蓬,我們僅僅需要和鏈接C/C++ 靜態(tài)庫(kù).a 文件一樣編寫(xiě)CMake即可。
鏈接framework 庫(kù)時(shí)候吊履,我們有兩種方法可以鏈接庫(kù)安皱。
一種是使用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})
這時(shí)候會(huì)從系統(tǒng)內(nèi)艇炎、link_directories(directory_to_framework_and_libs)酌伊、export CMAKE_INCLUDE_PATH=/XXXX 指定的路徑中,搜索我們想要的AudioUnit.framework 庫(kù)缀踪,然后編譯連接居砖。
一種是使用編譯參數(shù),示例代碼如下:
target_link_libraries(program "-framework your_frame_work_name")
set_target_properties(program PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks")
這時(shí)候會(huì)從-Wl,-F指定的路徑下驴娃,編譯我們的your_frame_work_name.framework 庫(kù)奏候。
如果鏈接系統(tǒng)framework 庫(kù),我們僅需要指定如下編譯參數(shù)即可:
set(CMAKE_EXE_LINKER_FLAGS "-framework Cocoa -framework AppKit -framework CoreData -framework Foundation")