本文主要记录 CMAKE生成iOS,iPad 工程 和 静态库的一些方法
在开发中打印log 是最快的调试方法
在cmake 中可以使用下列方法来进行打印
if(APPLE)
set_target_properties(${module_name} PROPERTIES
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES"
)
# 想判断 XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC 值是否设置成功
get_target_property(property_test ${module_name} XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC)
message(FATAL_ERROR ${property_test})
# 想直接打印信息
message(FATAL_ERROR ==================================== ${module_name})
## 注意⚠️ 生成工程时 当遇到 FATAL_ERROR 会报错在当前行 方便快速定位问题
endif()
CMake提供了两个基本模版
1 MacOSXFrameworkInfo.plist.in
2 MacOSXBundleInfo.plist.in
位置在 CMake文件夹->Modules中
// 常用配置
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
....
)
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(TestProject
${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(
TestProject 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(TestProject 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()
project(TestFramewok)
// 01
set(RESOURCE_FILES
${CMAKE_CURRENT_LIST_DIR}/../README.md
${CMAKE_CURRENT_LIST_DIR}/../res/iOS/Logo.png
)
// 02
add_library(TestFramewok SHARED
${SRC_FILES}
${RESOURCE_FILES}
)
// 03
set(FRAMEWORK_HEADER_FILES
${CMAKE_CURRENT_LIST_DIR}/platform/iphone/interface.h
)
// 04
set_target_properties(
TestFramewok
PROPERTIES
FRAMEWORK TRUE
FRAMEWORK_VERSION A
ACOSX_FRAMEWORK_IDENTIFIER com.allen0828.test
VERSION 1.0.0
SOVERSION 1.0.0
PUBLIC_HEADER "${FRAMEWORK_HEADER_FILES}"
RESOURCE "${RESOURCE_FILES}"
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES
)
find_library(lib-objc.a objc.A)
target_link_libraries(
${your project name}
-weak_library ${lib-objc.a}
)
if(APPLE)
if(IOS)
set (CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "13.0" CACHE STRING "Minimum OS X deployment version" FORCE)
else()
set (CMAKE_OSX_DEPLOYMENT_TARGET "10.12" CACHE STRING "Minimum OS X deployment version" FORCE)
endif()
endif()
// 在这一步之前设置
project(${your project name})