以前在安卓上編譯c/c++代碼,基本上都是手寫makefile,用ndk-build編譯,比較麻煩,後來研究了一下cmake編譯安卓的so庫,確實很方便,尤其是本身就有cmakelist文件的工程,省的在單獨寫makefile。
本文介紹如何用cmake編譯安卓庫,直接保存以下腳本,放到cmake文件同一目錄下執行。
首先得修改一下ndk路徑,因爲主要是利用ndk中的android.toolchain.cmake作爲交叉編譯工具鏈。注意ndk的版本不能太低,我編譯發現17的版本會有些問題,比較麻煩,ndk20的版本能順利通過。
#!/bin/bash
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake
#!/bin/bash
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake
export NDK_HOME=/Users/xxx/Library/Android/sdk/ndk/20.1.5948944
if [[ “$@“ =~ "-d" ]];then
echo "----------------------------cmake debug----------------------------"
cmake -DDEBUG=ON -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_NDK=$ANDROID_NDK_HOME \
-DANDROID_ABI=armeabi-v7a \
-DANDROID_TOOLCHAIN=clang \
-DANDROID_PLATFORM=android-21 \
-DANDROID_STL=c++_shared \
.
else
echo "----------------------------cmake release----------------------------"
cmake -DDEBUG=NO -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_NDK=$ANDROID_NDK_HOME \
-DANDROID_ABI=armeabi-v7a \
-DANDROID_TOOLCHAIN=clang \
-DANDROID_PLATFORM=android-21 \
-DANDROID_STL=c++_shared \
.
fi
make
rm -rf CMakeCache.txt
rm -rf CMakeFiles
rm -rf cmake_install.cmake
rm -rf Makefile
rm -rf CTestTestfile.cmake