前言
Android交叉编译工具链
- google官方出的android.toolchain.cmake
- 第三方android-cmake,可以被android.toolchain.cmake兼容
http://gitlab.vdian.net/WD-INPUT/toolchain/
iOS交叉编译工具链
- cristeab/ios-cmake,两三年没更新了
- leetal/ios-cmake,建议使用这个
交叉编译前的准备
clone项目到本地某个位置,android的可以直接使用ndk目录下的cmake,位于ndk/build/cmake/android.toolchain.cmake;iOS可以使用https://github.com/leetal/ios-cmake,将其clone到本地。
Android交叉编译
android的cmake必须使用sdk目录下的cmake可执行文件,google对其修改了源码,如果使用系统的cmake,可能导致编译出错
生成cmake编译所需的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
/Users/lizhangqu/AndroidSDK/cmake/
3.6
.3155560/bin/cmake \
-H
"../jni" \
-B
"../build/android/armeabi-v7a" \
-DANDROID_ABI=
"armeabi-v7a" \
-DANDROID_NDK=
"/Users/lizhangqu/AndroidNDK/android-ndk-r14b" \
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=
"../build/android/libs/armeabi-v7a" \
-DCMAKE_BUILD_TYPE=
"Release" \
-DCMAKE_TOOLCHAIN_FILE=
"/Users/lizhangqu/AndroidNDK/android-ndk-r14b/build/cmake/android.toolchain.cmake" \
-DANDROID_PLATFORM=
"android-14" \
-DANDROID_TOOLCHAIN=
"clang" \
-DCMAKE_C_FLAGS=
"-fpic -fexceptions -frtti" \
-DCMAKE_CXX_FLAGS=
"-fpic -fexceptions -frtti" \
-DANDROID_STL=
"c++_static" \
|
clean及构建目标产物
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#--build代表cmake生成的中间产物目录,即上面-B指定的目录
#--target代表构建哪个target
#-- -j4代表执行make的时候追加-j4,并行编译
#clean
/Users/lizhangqu/AndroidSDK/cmake/3.6.3155560/bin/cmake \
--build
"../build/android/armeabi-v7a" \
--target clean
# build your target
/Users/lizhangqu/AndroidSDK/cmake/3.6.3155560/bin/cmake \
--build
"../build/android/armeabi-v7a" \
--target 构建的目标target \
-- -j4
|
iOS交叉编译
生成cmake编译所需的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-H指向CMakeLists.txt文件父级目录
-B指向中间产物目录
-DCMAKE_BUILD_TYPE定义构建类型,取值Debug或Release,Release构建做-O3三级优化
-DIOS_PLATFORM定义构建的目标平台,OS表示构建iPhoneOS所需的lib,SIMULATOR代表构建x86模拟器所需的lib,SIMULATOR64代表构建x86_64模拟器所需的lib
-DCMAKE_TOOLCHAIN_FILE指向ios.toolchain.cmake文件,使用clone下来的项目中的文件
cmake \
-H"../jni" \
-B"../build/ios" \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_TOOLCHAIN_FILE="../toolchain/ios.toolchain.cmake" \
-DIOS_PLATFORM=OS
IOS_PLATFORM
OS = Build for iPhoneOS.
SIMULATOR = Build for x86 i386 iPhone Simulator.
SIMULATOR64 = Build for x86 x86_64 iPhone Simulator.
CMAKE_BUILD_TYPE
Debug or Release
|
clean及构建目标产物
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#--build代表cmake生成的中间产物目录,即上面-B指定的目录
#--target代表构建哪个target
#-- -j4代表执行make的时候追加-j4,并行编译
#clean
cmake
\
--build
"../build/android/armeabi-v7a"
\
--target clean
# build your target
cmake
\
--build
"../build/ios"
\
--target 构建的目标target
\
-- -j4
|
http://fucknmb.com/2017/06/27/cmake-%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/