文章目錄
- 一、Android NDK 構建腳本
- 二、CMake 構建腳本示例
- 三、CMake 命令手冊
- 1、CMake 腳本命令
- 2、CMake 工程命令
一、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})
從之前的一篇博客 【Android NDK 開發】Android Studio 使用 CMake 匯入靜態庫 ( CMake 簡介 | 構建腳本路徑配置 | 引入靜態庫 | 指定靜態庫路徑 | 鏈接動態庫 ) 復制來的 ;
三、CMake 命令手冊
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
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
在 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://www.uj5u.com/yidong/241877.html
標籤:其他
下一篇:Android 串口通信
