文章目录

  • 一、Android NDK 构建脚本
  • 二、CMake 构建脚本示例
  • 三、CMake 命令手册
    • 1、CMake 脚本命令
    • 2、CMake 工程命令

该系列博客的应用场景是 Android Studio 下 NDK 编程 , 使用 CMake 构建 C/C++ 工程 ;

一、Android NDK 构建脚本


Android 中使用 NDK 编译 C/C++ 源码有两种方式 , 参考 Android 官网 https://developer.android.google.cn/ndk/guides ;

方式一 : 使用 ndk-build 脚本 , 包括 Android.mk 和 Application.mk 两个脚本 , 详细的细节参考如下链接

  • ndk-build
  • Android.mk
  • Application.mk
  • 使用预构建的库

老的 Android 开发环境使用的是这种方式编译 C/C++ 源码 ;

方式二 : 使用 CMake 构建脚本 CMakeLists.txt 编译 C/C++ 源码 , 参考如下链接

  • CMake

这是目前 Google 官方推荐的方式 ;

二、CMake 构建脚本示例


下面的构建脚本中用到了很多命令 , 如

  • cmake_minimum_required
  • add_library
  • set_target_properties
  • message
  • find_library
  • set
  • target_link_libraries

上述命令都是 CMake 命令 , 可以在 CMake 命令文档中查询 , 当前 CMake 中有 474747 个脚本命令 , 464646 个工程命令 ;

CMake 构建脚本示例 :


# 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.4.1)# 设置函数库编译
add_library( # 参数 1 : 设置生成的动态库名称native-lib# 参数 2 : 设置生成的函数库类型 : ① 静态库 STATIC ② 动态库 SHAREDSHARED# 参数 3 : 配置要编译的源文件native-lib.cpp)# 引入静态库
#       ① 参数 1 ( add ) : 设置引入的静态库名称
#       ② 参数 2 ( SHARED ) : 设置引入的函数库类型 : ① 静态库 STATIC ② 动态库 SHARED
#       ③ 参数 3 ( IMPORTED ) : 表示引入第三方静态库 , 导入静态库 , 相当于预编译静态库
#                                   后续还需要设置导入路径 , 配合该配置使用
add_library(# 设置引入的静态库名称add# 设置引入的函数库类型为静态库STATIC# 表示引入第三方静态库IMPORTED)# 设置上述静态库的导入路径
#       设置目标属性参数 :
#           ① 参数 1 ( add ) : 要设置哪个函数库的属性
#           ② 参数 2 ( PROPERTIES ) : 设置目标属性
#           ③ 参数 3 ( IMPORTED_LOCATION ) : 设置导入路径
#           ④ 参数 4 : 配置静态库的文件路径
set_target_properties(# 设置目标add# 设置属性PROPERTIES# 导入路径IMPORTED_LOCATION# ${CMAKE_SOURCE_DIR} 是本 CMakeList.txt 构建脚本的路径 , 是 CMake 工具内置的变量#       Android CMake 也内置了一些变量 , 如 ANDROID_ABI${CMAKE_SOURCE_DIR}/../jniLibs/armeabi-v7a/libadd.a)# 打印日志信息
#       ${ANDROID_ABI} 的作用是获取当前的 CPU 指令集架构
#           当本次编译 armeabi-v7a CPU 架构时 , ${ANDROID_ABI} 值为 armeabi-v7a
#           当本次编译 x86 CPU 架构时 , ${ANDROID_ABI} 值为 x86
message("CMAKE_SOURCE_DIR : ${CMAKE_SOURCE_DIR}, ANDROID_ABI : ${ANDROID_ABI}")# 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib
#   这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so
#   不同的 Android 版本号 和 CPU 架构 需要到对应的目录中查找 , 此处是 29 版本 32 位 ARM 架构的日志库
find_library(log-liblog)# 设置变量
# CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器
# CMAKE_C_FLAGS 表示会将 C 参数传给编译器# 参数设置 : 传递 CMAKE_CXX_FLAGS C+= 参数给编译器时 , 在 该参数后面指定库的路径
#   CMAKE_SOURCE_DIR 指的是当前的文件地址
#   -L 参数指定动态库的查找路径
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/armeabi-v7a")# 链接函数库
#       参数 1 : 本构建脚本要生成的动态库目 标
#       参数 2 ~ ... : 后面是之前预编译的动态库或静态库 , 或引入的动态库
target_link_libraries(native-lib# 表示 编译 native-lib 模块, 要链接 add 模块add${log-lib})

从之前的一篇博客 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 ) 复制来的 ;

三、CMake 命令手册


CMake 命令分为三种 , 脚本命令 , 工程命令 , CTest 命令 ;

1、CMake 脚本命令


CMake 有 474747 个脚本命令 , 这些命令在任何时候都可以使用 , 参考 cmake-commands(7) : Scripting Commands 文档 ;

474747 个脚本命令如下 :

break
cmake_host_system_information
cmake_language
cmake_minimum_required
cmake_parse_arguments
cmake_policy
configure_file
continue
else
elseif
endforeach
endfunction
endif
endmacro
endwhile
execute_process
file
find_file
find_library
find_package
find_path
find_program
foreach
function
get_cmake_property
get_directory_property
get_filename_component
get_property
if
include
include_guard
list
macro
mark_as_advanced
math
message
option
return
separate_arguments
set
set_directory_properties
set_property
site_name
string
unset
variable_watch
while

2、CMake 工程命令


CMake 中有 464646 个工程命令 , 一般在 CMake 工程中才可以使用上述工程命令 ;

464646 个工程命令如下 , 详细的命令细节参考 cmake-commands(7) : Project Commands 文档 ;

add_compile_definitions
add_compile_options
add_custom_command
add_custom_target
add_definitions
add_dependencies
add_executable
add_library
add_link_options
add_subdirectory
add_test
aux_source_directory
build_command
create_test_sourcelist
define_property
enable_language
enable_testing
export
fltk_wrap_ui
get_source_file_property
get_target_property
get_test_property
include_directories
include_external_msproject
include_regular_expression
install
link_directories
link_libraries
load_cache
project
remove_definitions
set_source_files_properties
set_target_properties
set_tests_properties
source_group
target_compile_definitions
target_compile_features
target_compile_options
target_include_directories
target_link_directories
target_link_libraries
target_link_options
target_precompile_headers
target_sources
try_compile
try_run

在 Android Studio 中的 CMake 构建脚本 CMakeLists.txt 中使用到的所有 CMake 命令都来自上述脚本命令和工程命令 , 如 add_library , find_library , target_link_libraries 等 ;

Android Studio 中的 CMakeLists.txt 构建脚本中常用的命令 :

  • cmake_minimum_required
  • add_library
  • set_target_properties
  • message
  • find_library
  • set
  • target_link_libraries

【CMake】CMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )相关推荐

  1. 使用CMake来进行Android NDK开发

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android NDK开发可能在平时的项目开发中不常用到,但是这并不代表其不重要, 相反NDK开发是Android开发人员的进 ...

  2. android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一

    版权信息:本文为本人原创,欢迎转载,但请著明出处,并保留本版权信息. Android NDK编译脚本编写起来还是是比较简单条理的,然而它的语法和传统的linux GNU Make编译脚本的编写似乎有很 ...

  3. 【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )

    文章目录 一.Android Studio 中使用 CMake 编译单个 C++ 源文件 二.cmake_minimum_required 命令设置最小 CMake 版本 三.project 命令设置 ...

  4. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  5. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  6. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )

    文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...

  7. CMake 构建项目Android NDK项目基础知识

    本篇文章将介绍如何使用 CMake 构建实现你的第一个 NDK 项目. ##前言 你好!欢迎来到我的的学习笔记分享系列,第一次给大家分享的是 Android NDK 开发的学习笔记,让我们先开始了解 ...

  8. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  9. android cmake 打印_Android NDK 开发:CMake 使用

    1. 前言 当在做 Android NDK 开发时,如果不熟悉用 CMake 来构建,读不懂 CMakeLists.txt 的配置脚本,很容易就会踩坑,遇到编译失败,一个很小的配置问题都会浪费很多时间 ...

最新文章

  1. 安全狗:云时代的服务器安全守护者
  2. 为什么Java中有多态?
  3. SAP系统配置常用命令大全
  4. Apache Hive on Apache Tez
  5. VMware NSX组件构建矩阵
  6. 基于Redis的分布式锁的简单实现
  7. 软件外包相关职业规划
  8. Error while waiting for device: The emulator process for AVD Pixel_2_XL_API_28 was killed.
  9. WCDMA为什么上行是干扰受限,下行是功率受限
  10. 安川机器人梯形图指令(三)
  11. linux结课考试试题,Linux认证考试课后基础试题及答案
  12. wps画流程图交叉弧形_wps画的流程图打印不清晰|wps怎么绘制出立体流程图?wps绘制出立体流程图的方法...
  13. Camtasia给视频加马赛克怎么操作?
  14. S MT 精密电阻 对照 表
  15. 计算年龄:DATEDIF函数
  16. 非常有意思的Flowlet
  17. 信息学奥赛一本通1374 铲雪车(snow)
  18. a 标签 downLoad属性兼容,wav音频文件浏览器直接打开
  19. NAND Flash 接口对比
  20. C++ 函数的递归调用

热门文章

  1. 登录账号,玩猜数字游戏
  2. Python进阶-----类的继承顺序
  3. Hdu 1029 Ignatius and the Princess IV
  4. mapreduce原理
  5. poj1018 Communication System (有道翻译完全拯救不了)
  6. 欠债2亿,清华辍学少女用13年时间把自己修成了“锦鲤女王”!
  7. 不允许所请求的注册表访问权
  8. 用gameMaker做个小游戏
  9. c#值类型和引用类型
  10. 学习ASP.NET一定要学习ASP.NET AJAX吗?