本文主要记录 CMAKE生成iOS,iPad 工程 和 静态库的一些方法
CMake提供了两个基本模版
1 MacOSXFrameworkInfo.plist.in
2 MacOSXBundleInfo.plist.in
位置在 CMake文件夹->Modules中
CMake 官方文档
// 常用配置
set(MACOSX_FRAMEWORK_IDENTIFIER "allen.cn")
set(MACOSX_FRAMEWORK_NAME "GoodSDK")
set(MACOSX_FRAMEWORK_BUNDLE_VERSION "1.0.0")
set(MACOSX_FRAMEWORK_SHORT_VERSION_STRING "1.0.0")
可以指定模版,并且指定路径
set_target_properties(
....
MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_CURRENT_LIST_DIR}/Info.plist.in
....
)
link 系统库
if(IOS)
find_library(lib-uikit UIKit)
find_library(lib-arkit ARKit)
find_library(lib-avfoundation AVFoundation)
find_library(lib-webkit WebKit)
find_library(lib-eventkit EventKit)
find_library(lib-coremedia CoreMedia)
find_library(lib-corevideo CoreVideo)
find_library(lib-corelocation CoreLocation)
find_library(lib-coregraphics CoreGraphics)
find_library(lib-corebluetooth CoreBluetooth)
find_library(lib-coremotion CoreMotion)
find_library(lib-gss GSS)
find_library(lib-videotoolbox VideoToolbox)
find_library(lib-audiotoolbox AudioToolbox)
find_library(lib-photos Photos)
find_library(lib-iconv iconv)
find_library(lib-gles OpenGLES)
find_library(lib-accelerate Accelerate)
target_link_libraries(CPRenderInstance
${lib-uikit}
${lib-arkit}
${lib-avfoundation}
${lib-webkit}
${lib-eventkit}
${lib-coremedia}
${lib-corevideo}
${lib-corelocation}
${lib-coregraphics}
${lib-corebluetooth}
${lib-gss}
${lib-videotoolbox}
${lib-audiotoolbox}
${lib-photos}
${lib-iconv}
${lib-gles}
${lib-accelerate}
-lz
)
endif()
基础配置项
set_target_properties(
AlgorithmSDK PROPERTIES
# Make target is framework
FRAMEWORK TRUE
FRAMEWORK_VERSION C
MACOSX_FRAMEWORK_IDENTIFIER ${MACOSX_FRAMEWORK_IDENTIFIER}
MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_CURRENT_LIST_DIR}/Info.plist.in
# Mark which headers should public
PUBLIC_HEADER ${TARGET_HEADERS}
## ----------------------------------
## Architecture
## ----------------------------------
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES"
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Release] "NO"
## ----------------------------------
## Build Location
## ----------------------------------
XCODE_ATTRIBUTE_SYMROOT "build"
## ----------------------------------
## Build Option
## ----------------------------------
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Debug] "dwarf"
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] "dwarf-with-dsym"
## ----------------------------------
## Deployment
## ----------------------------------
# Enable iPhone,iPad, cmake default is iPhone
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2"
# Enable framework can archive, cmake default is NO
XCODE_ATTRIBUTE_SKIP_INSTALL "YES"
XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_LIBRARY_DIR)/Frameworks"
## ----------------------------------
## Link
## ----------------------------------
XCODE_ATTRIBUTE_DYLIB_INSTALL_NAME_BASE "@rpath"
XCODE_ATTRIBUTE_LD_DYLIB_INSTALL_NAME "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)"
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
XCODE_ATTRIBUTE_DYLIB_COMPATIBILITY_VERSION "1"
XCODE_ATTRIBUTE_DYLIB_CURRENT_VERSION "1"
## ----------------------------------
## Packaging
## ----------------------------------
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${MACOSX_FRAMEWORK_IDENTIFIER}
## ----------------------------------
## Apple Clang - Language - C++
## ----------------------------------
XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++14"
XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++"
## ----------------------------------
## Apple Clang - Language - Modules
## ----------------------------------
XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES"
## ----------------------------------
## Apple Clang - Language - Objective-C
## ----------------------------------
# Enable ARC, cmake default is MRC
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES"
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK "YES"
## ----------------------------------
## Apple Clang - Language - Code Generation
## ----------------------------------
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES"
)
签名问题
set_target_properties(dynamicFramework PROPERTIES
........
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
)
将另一个工程的文件添加到生成的工程中
if(IOS)
file(GLOB_RECURSE extraSrcs
${CMAKE_CURRENT_LIST_DIR}/source/private/app/core/pugixml/*
${CMAKE_CURRENT_LIST_DIR}/source/private/platform/iphone/*.mm
${CMAKE_CURRENT_LIST_DIR}/source/private/platform/iphone/arkit/*.cpp
${CMAKE_CURRENT_LIST_DIR}/source/private/platform/iphone/arkit/*.mm
${CMAKE_CURRENT_LIST_DIR}/source/private/audio/*.mm
${CMAKE_CURRENT_LIST_DIR}/source/private/features/mono/*.mm
)
arc_common_part({input other name})
endif()