以前开发 Android 下的二进制程序都是开个 jni 目录, 手写 Android.mk, 而后调用 ndk-build 生成可执行文件, 这样的步骤. 但最近的工程须要用到 Lua 解析器执行 Lua 脚本, 所以须要处理的文件就多了, 再继续闷头写 Android.mk 就显得效率很低. 何况 CLion 也是经过 CMake 构建工程的, 所以就打算试试看能不能经过 CMake 来构建 Android 下的可执行文件.linux
结果固然是 OK, 现将基本配置记录以下.android
虽然 NDK 的 prebuilt 目录中有提供编译链工具, 但使用起来并不方便. 所幸 NDK 还提供了一个可生成独立编译链工具的脚本. 所以先经过该脚本生成独立编译链.app
$NDK/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.8 --install-dir=~/app/ndk_toolchain
该脚本的大部分选项都有默认值, 通常只需指定这两个参数就好了:ide
--toolchain 该参数用于设置要使用的编译链, 在 $NDK/toolchains 目录下能够看到全部支持的编译链工具工具
--install-dir 制定生成的编译链工具的安装位置ui
好, 有了编译链工具后下面就简单了.idea
cmake_minimum_required(VERSION 3.3) project(demo) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") # Android 5.0 以上须要在此处设置 PIE set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie") # 配置使用 NDK Standalone Toolchain 编译 set(NDK_STANDALONE_TOOLCHAIN ~/app/ndk_toolchain) set(CMAKE_SYSTEM_NAME AndroidARM) set(CMAKE_SYSTEM_VERSION 3) set(CMAKE_C_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/arm-linux-androideabi/bin/gcc) set(CMAKE_CXX_COMPILER ${NDK_STANDALONE_TOOLCHAIN}/arm-linux-androideabi/bin/g++) set(CMAKE_FIND_ROOT_PATH ${NDK_STANDALONE_TOOLCHAIN}) # 使用 NDK 提供的头文件 add_definitions("--sysroot=${NDK_STANDALONE_TOOLCHAIN}/sysroot") aux_source_directory(src SOURCE_FILES) add_executable(demo ${SOURCE_FILES})
到此就大功告成了, 是否是很简单啊? 固然也能够在 CMakeLists.txt 里加个开关来切换 x86 和 arm 平台, 方便调试, 在此就再也不赘述了.调试