【CMake】CMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )
文章目錄
- 一、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 while2、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 命令手册 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据挖掘】数据挖掘总结 ( K-Mea
- 下一篇: 【鸿蒙 HarmonyOS】Abilit