Poco库使用 CMake 编译,支持 NetSSL
16lz
2021-01-26
在 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
更多相关文章
- Kotlin中的Android项目编译出现 Unresolved reference: R 或者co
- android 反编译操作
- 有关Intent的android的API
- Android中线程的处理
- 活用Android的Message Queue(1)
- Android多线程之HandlerThread
- Android(安卓)ndk移植c库libpng
- NDK(1)--体验NDK
- android异步处理Handler+Thread使用进阶