在 CMake 项目中引入Poco库编译,测试工程文件结构如下

test|--cmake|-- ios.toolchain.cmake|-- test.cc|-- test.h|--CMakeLists.txt|--third_party|-- poco|-- openssl

openssl 各端(Android,IOS,Win,MacOS)可从github下载:

https://github.com/vintonliu/openssl-libs.git

CMakeLists.txt 内容:

# CMakeList.txt : Top-level CMake project file, do global configuration# and include sub-projects here.#cmake_minimum_required (VERSION 3.8)project ("test")set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)# openssl need for poco net sslset(OPENSSL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/openssl")set(SSL_NAME "libssl.a")set(CRYPTO_NAME "libcrypto.a")if(WIN32)set(SSL_NAME "libssl.lib")set(CRYPTO_NAME "libcrypto.lib")if(CMAKE_CL_64)set(OPENSSL_INCLUDE_DIR "${OPENSSL_DIR}/pc/x64/include")set(OPENSSL_LIB_DIR "${OPENSSL_DIR}/pc/x64/lib")else()set(OPENSSL_INCLUDE_DIR "${OPENSSL_DIR}/pc/x86/include")set(OPENSSL_LIB_DIR "${OPENSSL_DIR}/pc/x86/lib")endif(CMAKE_CL_64)elseif(ANDROID)set(OPENSSL_INCLUDE_DIR "${OPENSSL_DIR}/android/${ANDROID_ABI}/include")set(OPENSSL_LIB_DIR "${OPENSSL_DIR}/android/${ANDROID_ABI}/lib")elseif(APPLE)if(IOS)set(OPENSSL_INCLUDE_DIR "${OPENSSL_DIR}/ios/include")set(OPENSSL_LIB_DIR "${OPENSSL_DIR}/ios/lib")else()# set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl@1.1"set(OPENSSL_INCLUDE_DIR "${OPENSSL_DIR}/mac/include")set(OPENSSL_LIB_DIR "${OPENSSL_DIR}/mac/lib")endif(IOS)endif(WIN32)set(OPENSSL_INCLUDE_DIR "${OPENSSL_INCLUDE_DIR}" CACHE STRING "openssl include" FORCE)set(OPENSSL_SSL_LIBRARY "${OPENSSL_LIB_DIR}/${SSL_NAME}" CACHE STRING "ssl library" FORCE)set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_LIB_DIR}/${CRYPTO_NAME}" CACHE STRING "crypto library" FORCE)# 设置poco库编译模块选项set(POCO_STATIC ON CACHE BOOL "Set to OFF|ON (default is OFF) to control build of POCO as STATIC library" FORCE)set(ENABLE_NETSSL ON CACHE BOOL "Enable NetSSL" FORCE)set(ENABLE_CRYPTO ON CACHE BOOL "Enable Crypto" FORCE)set(ENABLE_ENCODINGS OFF CACHE BOOL "Enable Encodings" FORCE)set(ENABLE_MONGODB OFF CACHE BOOL "Enable MongoDB" FORCE)set(ENABLE_REDIS OFF CACHE BOOL "Enable Redis" FORCE)set(ENABLE_PDF OFF CACHE BOOL "Enable PDF" FORCE)set(ENABLE_DATA OFF CACHE BOOL "Enable Data" FORCE)set(ENABLE_DATA_SQLITE OFF CACHE BOOL "Enable Data SQlite" FORCE)set(ENABLE_DATA_MYSQL OFF CACHE BOOL "Enable Data MySQL" FORCE)set(ENABLE_DATA_ODBC OFF CACHE BOOL "Enable Data ODBC" FORCE)set(ENABLE_ZIP OFF CACHE BOOL "Enable Zip" FORCE)set(ENABLE_PAGECOMPILER OFF CACHE BOOL "Enable PageCompiler" FORCE)set(ENABLE_PAGECOMPILER_FILE2PAGE OFF CACHE BOOL "Enable File2Page" FORCE)set(ENABLE_XML OFF CACHE BOOL "Enable XML" FORCE)# 添加 线程名字宏定义,方便查看线程名字if(WIN32)add_definitions(-DPOCO_WIN32_DEBUGGER_THREAD_NAMES)else()add_definitions(-DPOCO_POSIX_DEBUGGER_THREAD_NAMES)endif()# 添加 poco 库编译add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/poco)set(Poco_COMPONENTS "")list(APPEND Poco_COMPONENTS "PocoFoundation")list(APPEND Poco_COMPONENTS "PocoJSON")list(APPEND Poco_COMPONENTS "PocoNet")list(APPEND Poco_COMPONENTS "PocoUtil")# list(APPEND Poco_COMPONENTS "PocoXML")list(APPEND Poco_COMPONENTS "PocoNetSSL")list(APPEND Poco_COMPONENTS "PocoCrypto")set(SRCS test.cctest.h)add_executable(test            SHARED            ${SRCS} )            target_link_libraries(test${Poco_COMPONENTS})

Android 端编译

#!/bin/bashCWD=`pwd`BUILD_MODE=$1if [ -n "$BUILD_MODE" ]then    BUILD_MODE=Debugelse    BUILD_MODE=MinSizeRelfiecho "BUILD_MODE: $BUILD_MODE"#配置交叉编译链# linux, config ANDROID_NDK_R20_ROOT="path to ndkr20" in profileANDROID_NDK_TOOLCHAIN_HOME=$ANDROID_NDK_R20_ROOT# windows平台,VSCode, git bash# ANDROID_NDK_TOOLCHAIN_HOME=/d/Android/sdk/ndk-bundleCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_TOOLCHAIN_HOME/build/cmake/android.toolchain.cmake# CMakeList.txt 所在文件夹SOURCE_PATH=$CWD# 编译中间文件夹OBJECT_DIR="$CWD/out/build/android_$BUILD_MODE"#安装文件夹INSTALL_DIR="$CWD/out/install/android_$BUILD_MODE"if [ -n "$1" -a "$1" == "clean" ]; thenecho "rm -rf $CWD/out/build/android"rm -rf "$CWD/out/build/android*"exit 0fiif [ -d $INSTALL_DIR ]then    rm -rf $INSTALL_DIRfi# 五种类型cpu编译链android_toolchains=(    # armeabi is no longer support build#   "armeabi"   "armeabi-v7a"   "arm64-v8a"   "x86"   "x86_64")API=23PLATFORM_CONFIG="-DANDROID=1 -DCMAKE_SYSTEM_NAME=Android \                -DANDROID_NDK=$ANDROID_NDK_TOOLCHAIN_HOME \                -DANDROID_TOOLCHAIN=clang \                -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE \                -DANDROID_NATIVE_API_LEVEL=$API \                -DCMAKE_BUILD_TYPE=$BUILD_MODE"BUILD_CONFIG="-DCMAKE_VERBOSE_MAKEFILE=ON"num=${#android_toolchains[@]}for((i=0; i<num; i++))do    echo "************* building ${android_toolchains[i]} ***********"        # create build temp dir    mkdir -p $OBJECT_DIR/${android_toolchains[i]}mkdir -p $INSTALL_DIR/${android_toolchains[i]}    cd $OBJECT_DIR/${android_toolchains[i]}    PLATFORM_CONFIG="$PLATFORM_CONFIG \                -DANDROID_ABI=${android_toolchains[i]} \                -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR/${android_toolchains[i]}"    cmake -G "Ninja" $PLATFORM_CONFIG $BUILD_CONFIG $SOURCE_PATH    echo "******************** cmake generator done ****************"    #cmake --build .    ninja -j8    echo "******************** cmake build done ********************"    done

IOS 端编译:

#!/bin/bashCWD=`pwd`# BUILD_MODE=ReleaseBUILD_MODE=MinSizeRelLINK_MODE=sharedBUILD_MODE=$1if [ -n "$BUILD_MODE" ]then    BUILD_MODE=Debugelse    BUILD_MODE=MinSizeRelfi# must add -DANDROID=1, else could not generate Android CMakeFilesPLATFORM_CONFIG="-DCMAKE_TOOLCHAIN_FILE=$CWD/cmake/ios.toolchain.cmake \               -DCMAKE_BUILD_TYPE=$BUILD_MODE \               -DENABLE_BITCODE=0 \               -DENABLE_ARC=0 \               -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=E8TD92447B \               -DDEPLOYMENT_TARGET=9.0"PLATFORMS=(    "OS"    "SIMULATOR"    "SIMULATOR64")SOURCE_PATH=$CWD# 编译中间文件夹OBJECT_DIR="$CWD/out/build/ios_$BUILD_MODE"#安装文件夹INSTALL_DIR="$CWD/out/install/ios_$BUILD_MODE"rm -rf $INSTALL_DIRnum=${#PLATFORMS[@]}for((i=0; i<num; i++))do    PLATFORM_CONFIG="$PLATFORM_CONFIG \                -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR/${PLATFORMS[i]}"    mkdir -p "$OBJECT_DIR/${PLATFORMS[i]}"    cd "$OBJECT_DIR/${PLATFORMS[i]}"    cmake -G"Xcode" $PLATFORM_CONFIG -DPLATFORM=${PLATFORMS[i]} $SOURCE_PATH    cmake --build . --config $BUILD_MODE --target installdone

其中,ios.toolchain.cmake 可从GitHub下载:

git clone https://github.com/vintonliu/ios-cmake.git

更多相关文章

  1. Kotlin中的Android项目编译出现 Unresolved reference: R 或者co
  2. android 反编译操作
  3. 有关Intent的android的API
  4. Android中线程的处理
  5. 活用Android的Message Queue(1)
  6. Android多线程之HandlerThread
  7. Android(安卓)ndk移植c库libpng
  8. NDK(1)--体验NDK
  9. android异步处理Handler+Thread使用进阶

随机推荐

  1. 47页PPT | 如何利用Python进行自动化办公
  2. 新版本chrome 浏览器非受信https站点访
  3. Veeam备份虚拟机报错
  4. 教你预测北京雾霾,基于keras LSTMs的多变
  5. seaborn常用的10种数据分析图表
  6. 基于geopandas的空间数据分析-深入浅出分
  7. 火爆全网的动态曲线图是怎么做的?
  8. 使用pyecharts绘制词云图-淘宝商品评论展
  9. 使用sklearn轻松实现数据缩放
  10. Numpy进阶之排序小技巧