Android Studio下NDK编程引入CMake
一、Android NDK 构建脚本
Android 中使用 NDK 编译 C/C++ 源码有两种方式 , 参考 Android 官网:https://developer.android.google.cn/ndk/guides
方式一 :
使用 ndk-build 脚本 , 包括 Android.mk 和 Application.mk 两个脚本 , 详细的细节参考如下链接
老的 Android 开发环境使用的是这种方式编译 C/C++ 源码 ;
方式二 :
使用 CMake 构建脚本 CMakeLists.txt 编译 C/C++ 源码 , 参考如下链接
这是目前 Google 官方推荐的方式
二、CMake 构建脚本示例
下面的构建脚本中用到了很多命令 , 如
- cmake_minimum_required
- add_library
- set_target_properties
- message
- find_library
- set
- target_link_libraries
上述命令都是 CMake 命令 , 可以在 CMake 命令文档中查询 , 当前 CMake 中有 50 个脚本命令 , 46 个工程命令 ;
CMake 构建脚本示例 :
1 | # 指定 CMake 最低版本 |
从之前的一篇博客 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 ) 复制来的 ;
三、CMake 命令手册
CMake 命令分为三种:脚本命令, 工程命令, CTest 命令
1、CMake 脚本命令
CMake 有 50 个脚本命令 , 这些命令在任何时候都可以使用 , 参考 cmake-commands(7) : Scripting Commands 文档
50 个脚本命令如下 :
- block
- break
- cmake_host_system_information
- cmake_language
- cmake_minimum_required
- cmake_parse_arguments
- cmake_path
- cmake_policy
- configure_file
- continue
- else
- elseif
- endblock
- 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 中有 46 个工程命令 , 一般在 CMake 工程中才可以使用上述工程命令 ;
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
3、CTest 工程命令
13 个测试命令如下 , 详细的命令细节参考 cmake-commands(7) : CTest Commands 文档
- ctest_build
- ctest_configure
- ctest_coverage
- ctest_empty_binary_directory
- ctest_memcheck
- ctest_read_custom_files
- ctest_run_script
- ctest_sleep
- ctest_start
- ctest_submit
- ctest_test
- ctest_update
- ctest_upload
在 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
参考链接:https://blog.csdn.net/shulianghan/article/details/111866146