介紹
本系列是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)