编译iOS库
CMakeList.txt中的配置是通用的,编译的目标系统需要在编译命令cmake
后面指定,在Mac系统上默认编译的是基于Mac系统的x86_64的,指定编译iOS可以使用下列命令:
cmake .. -GXcode \
-DCMAKE_SYSTEM_NAME=iOS \
"-DCMAKE_OSX_ARCHITECTURES=armv7;arm64" \
-DCMAKE_OSX_SYSROOT=iphoneos\
-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0 \
-DCMAKE_INSTALL_PREFIX=`pwd`/_install \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DCMAKE_IOS_INSTALL_COMBINED=YES \
-DENABLE_BITCODE=NO
其中GXcode
会生成xcode工程,DCMAKE_OSX_ARCHITECTURES
是指定目标包含的架构,这里指定了armv7和arm64两个架构;DENABLE_BITCODE
指定是不是启用bitcode,这个需要根据各自的项目需求设置,NO是不适用bitcode优化;
在 cmake后面可以增加-DCMAKE_BUILD_TYPE=Release
去指定编译的是release还是debug,例如编译macos可以如下指定:
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
上面命令执行完后执行下列命令编译:
cmake --build . --config Release
执行后出现如下图的显示表示编译成功:
在官方的文档中也是建议这样的方式进行编译,config后面指定的是编译的是release还是debug,最终编译的效果如下:
上图中是指定了生成编译库的路径后的效果,指定编译库路径的方式在下节介绍;
指定编译库的路径
很多时候当编译不同平台的库的时候我们希望编译的库放在不通的目录下,
cmake中判断编译的目标系统是ios还是macOS的方式:
if(APPLE AND NOT IOS )
# iOS下
set(LIBRARY_OUTPUT_PATH mac)
else()
# macOS下
set(LIBRARY_OUTPUT_PATH ios)
endif( )
通过上面的判断就可区分出当前编译的是iOS还是MacOS的库,然后通过LIBRARY_OUTPUT_PATH
就可以指定编译的二进制库的输出路径;
需要注意的是上面的代码需要放在add_library
之前指定;
常用的判断系统的方式还有:
IF (WIN32)
MESSAGE(STATUS "Now is windows")
ELSEIF (APPLE)
MESSAGE(STATUS "Now is Apple systens.")
ELSEIF (UNIX)
MESSAGE(STATUS "Now is UNIX-like OS's.")
ELSEIF(ANDROID)
MESSAGE(STATUS "Now is Android OS's.")
官方的系统支持的系统变量还有很多,具体看官方文档:cmake-variables