CMAKE生成iOS和iPad配置


本文主要记录 CMAKE生成iOS,iPad 工程 和 静态库的一些方法

cmake打印log调试

在开发中打印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中

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(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()

生成framework 将资源添加到RESOURCE

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
)

设置引用库为可选值 optional

find_library(lib-objc.a objc.A)

target_link_libraries(
	${your project name}
	-weak_library ${lib-objc.a}
)

设置Xcode 工程最低支持的版本

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})

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值