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

网友投稿 1231 2022-05-30

文章目录

一、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 中有 47 47 47 个脚本命令 , 46 46 46 个工程命令 ;

CMake 构建脚本示例 :

# 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.4.1) # 设置函数库编译 add_library( # 参数 1 : 设置生成的动态库名称 native-lib # 参数 2 : 设置生成的函数库类型 : ① 静态库 STATIC ② 动态库 SHARED SHARED # 参数 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-lib log) # 设置变量 # 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})

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

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

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

三、CMake 命令手册

CMake 命令分为三种 ,

脚本命令 ,

工程命令 ,

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

CTest 命令 ;

1、CMake 脚本命令

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

47 47 47 个脚本命令如下 :

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

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

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

2、CMake 工程命令

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

46 46 46 个工程命令如下 , 详细的命令细节参考 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

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

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

在 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

Android ARM

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MA Pro自定义模板应用系列1——合同信息结构化提取
下一篇:Python 基础语法_Python脚本文件结构
相关文章