为什么80%的码农都做不了架构师?>>>   

之前开发 Android 下的二进制程序都是开个 jni 目录, 手写 Android.mk, 然后调用 ndk-build 生成可执行文件, 这样的步骤. 但最近的工程需要用到 Lua 解析器执行 Lua 脚本, 因此需要处理的文件就多了, 再继续闷头写 Android.mk 就显得效率很低. 况且 CLion 也是通过 CMake 构建工程的, 因此就打算试试看能不能通过 CMake 来构建 Android 下的可执行文件.

结果当然是 OK, 现将基本配置记录如下.

基础环境

  • Ubuntu 14.04
  • CMake 3.3.0
  • android-ndk-r10e-linux-x86_64

准备 NDK Standalone Toolchain

虽然 NDK 的 prebuilt 目录中有提供编译链工具, 但使用起来并不方便. 所幸 NDK 还提供了一个可生成独立编译链工具的脚本. 因此先通过该脚本生成独立编译链.

$NDK/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.8 --install-dir=~/app/ndk_toolchain

该脚本的大部分选项都有默认值, 一般只需指定这两个参数就行了:

--toolchain 该参数用于设置要使用的编译链, 在 $NDK/toolchains 目录下可以看到所有支持的编译链工具

--install-dir 制定生成的编译链工具的安装位置

好, 有了编译链工具后下面就简单了.

编写 CMakeLists.txt

cmake_minimum_required(VERSION 3.3)project(demo)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")# Android 5.0 以上需要在此处设置 PIEset(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 平台, 方便调试, 在此就不再赘述了.

转载于:https://my.oschina.net/gotax/blog/516861

更多相关文章

  1. Python3原生编写月份计算工具
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android性能测试小工具Emmagee
  6. Android中 Js 扩展及交互
  7. 实现Unity和Android进行交互
  8. Android的性能监控工具StrictMode
  9. Git diff代码比较的高级技巧

随机推荐

  1. Android应用程序剖析
  2. android wear-Drawing Watch Faces
  3. Android(安卓)Interprocess Communicatio
  4. android-环境
  5. Android(安卓)SDK r23
  6. Android(安卓)Tip : think more about An
  7. android 生成密钥 签名
  8. Android(安卓)SDK 源代码编译
  9. Android(安卓)Interprocess Communicatio
  10. android developers api guides 文档学习