【iOS開(kāi)發(fā)】SDK開(kāi)發(fā)之編譯c/c++

介紹

本系列是SDK打包的實(shí)踐,主要解決一下3個(gè)問(wèn)題,本篇是第一篇。
【iOS開(kāi)發(fā)】SDK開(kāi)發(fā)之編譯c/c++
【iOS開(kāi)發(fā)】SDK開(kāi)發(fā)之podspec編寫(xiě)
【iOS開(kāi)發(fā)】SDK開(kāi)發(fā)之podspec內(nèi)執(zhí)行腳本

本期問(wèn)題

SDK的源碼是由其他團(tuán)隊(duì)編寫(xiě),使用的語(yǔ)言為c/c++,且會(huì)依賴(lài)第三方的庫(kù)(也是c/c++編寫(xiě))。
考慮有以下幾種方案:1 Xcode編譯 2 cmake編譯

一 Xcode編譯步驟

1 使用Xcode創(chuàng)建Framework項(xiàng)目

image.png

2 添加所有使用的c/c++文件(依賴(lài)的第三方的文件)
3 調(diào)整暴露的頭文件public headers
4 編譯(command+B)

優(yōu)點(diǎn):
Xcode原生IDE加持,可視化好,操作簡(jiǎn)單
缺點(diǎn):
1 需要運(yùn)行在mac電腦上(iOS開(kāi)發(fā)肯定有mac電腦,but如果需要編寫(xiě)團(tuán)隊(duì)來(lái)編譯就不行了,因?yàn)樗麄兪莑inux環(huán)境)
2 第三方依賴(lài)需要我們手動(dòng)配置(尤其在依賴(lài)文件有變化的時(shí)候,需要跨團(tuán)隊(duì)溝通)

二 cmake編譯步驟

1 編寫(xiě)cmake腳本
2 執(zhí)行cmake腳本

優(yōu)點(diǎn):
1 運(yùn)行在任何有cmake環(huán)境的電腦(linux/mac均可)
2 cmake支持嵌套,直接嵌套使用編寫(xiě)團(tuán)隊(duì)使用的cmake
3 腳本編寫(xiě)簡(jiǎn)單,維護(hù)成本低
4 可接CI/CD

最后附上打包SDK的cmake(嵌套的cmake就不貼了)

cmake_minimum_required(VERSION 3.14)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_COMPILER "clang")

message(STATUS "compile iOS")
# 設(shè)置工程名稱(chēng)
project(HelloFramework)
set(BUILD_SHARED_LIBS ON)
# 設(shè)置目標(biāo)平臺(tái)為 iOS
set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_OSX_SYSROOT iphoneos)
set(CMAKE_OSX_ARCHITECTURES arm64)

# 設(shè)置生成的 iOS 最低版本,假設(shè)是 iOS 11.0
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0")

# 設(shè)置為生成 Framework 類(lèi)型
set(CMAKE_MACOSX_BUNDLE YES)
set(CMAKE_FRAMEWORK TRUE)

# 添加源文件
set(PUBLIC_INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/algorithms/mobie_lib_test/src/align_interface)
set(SOURCE_FILES STATIC ${PUBLIC_INTERFACE}/incremental_align_c_api.h)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/dependence/eigen337/cmake)
set(EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/dependence/eigen337)
message("CMAKE_CURRENT_SOURCE_DIR" ${CMAKE_CURRENT_SOURCE_DIR})

find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
message("EIGEN3_INCLUDE_DIR" ${EIGEN3_INCLUDE_DIR})


set(OpenCV_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/opencv2.framework/opencv2)
set(OpenCV_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/opencv2.framework/Headers)
message("OpenCV_INCLUDE_DIRS" ${OpenCV_INCLUDE_DIRS})


set(Boost_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/boost/libboosttt.a)
set(Boost_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/boost/include)
include_directories(${Boost_INCLUDE_DIRS})

set(MNN_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/MNN.framework/MNN)
set(MNN_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/MNN.framework/Headers)
message("MNN_INCLUDE_DIRS" ${MNN_INCLUDE_DIRS})

set(GLOG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/ceres/include/ceres/internal/miniglog  ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/ceres/include)
message("GLOG_INCLUDE_DIRS" ${GLOG_INCLUDE_DIRS})
include_directories(${GLOG_INCLUDE_DIRS})

set(G2O_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/lib/g2o)
include_directories(${G2O_INCLUDE_DIRS})

set(PNG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../3rd/iOS/dependence/png)
include_directories(${PNG_INCLUDE_DIRS})
message("PNG_INCLUDE_DIRS" ${PNG_INCLUDE_DIRS})


#設(shè)置libg2
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/algorithms/mobile_pose_align_lib/third_part/g2o_tool/g2o/core)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/algorithms/mobile_pose_align_lib/third_part/g2o_tool) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/algorithms/mobile_pose_align_lib/third_part/g2o_tool)

add_subdirectory(algorithms)
# # 設(shè)置輸出路徑(可選)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/frameworks)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容