android中c++標(biāo)準(zhǔn)的選擇
C++ Standard
指定編譯庫(kù)的環(huán)境秕岛,其中Toolchain Default使用的是默認(rèn)的CMake環(huán)境有额;C++ 11也就是C++環(huán)境。兩種環(huán)境都可以編庫(kù)削彬,至于區(qū)別,后續(xù)會(huì)跟進(jìn)使兔,當(dāng)前博文使用的是CMake環(huán)境。
Exceptions Support
如果選中復(fù)選框藤韵,則表示當(dāng)前項(xiàng)目支持C++異常處理虐沥,如果支持,在項(xiàng)目Module級(jí)別的build.gradle
文件中會(huì)增加一個(gè)標(biāo)識(shí) -fexceptions
到cppFlags
屬性中荠察,并且在so庫(kù)構(gòu)建時(shí)置蜀,gradle會(huì)把該屬性值傳遞給CMake進(jìn)行構(gòu)建。
Runtime Type Information Support
同理悉盆,選中復(fù)選框盯荤,項(xiàng)目支持RTTI,屬性cppFlags
增加標(biāo)識(shí)-frtti
CMakeLists.txt的配置
CMakeLists.txt 用于配置jni項(xiàng)目屬性焕盟,主要用于聲明CMake版本 so庫(kù)名稱 C/Cpp文件路徑等信息秋秤。
注釋
和bash中一樣宏粤,使用“#”作為一行的注釋。
cmake版本聲明
cmake_minimum_required(VERSION 3.4.1)
添加編譯目標(biāo)add_library()
配置庫(kù)信息灼卢,庫(kù)的名字绍哎,動(dòng)態(tài)庫(kù)或靜態(tài)庫(kù),依賴的源文件
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
# Associated headers in the same location as their source
# file are automatically included.
src/main/cpp/native-lib.cpp
src/main/cpp/test.cpp)
STATIC:靜態(tài)庫(kù)鞋真,是目標(biāo)文件的歸檔文件崇堰,在鏈接其它目標(biāo)的時(shí)候使用。
SHARED:動(dòng)態(tài)庫(kù)涩咖,會(huì)被動(dòng)態(tài)鏈接海诲,在運(yùn)行時(shí)被加載。
MODULE:模塊庫(kù)檩互,是不會(huì)被鏈接到其它目標(biāo)中的插件特幔,但是可能會(huì)在運(yùn)行時(shí)使用dlopen-系列的函數(shù)動(dòng)態(tài)鏈接。
配置頭文件路徑include_directories()
include_directories("src/main/cpp")
查找鏈接庫(kù)find_library
在指定目錄下搜索一個(gè)庫(kù), 保存在變量log-lib中闸昨,如果沒有指定路徑蚯斯,則使用默認(rèn)系統(tǒng)路徑
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
添加鏈接庫(kù) target_link_libraries
添加鏈接庫(kù),相同于指定-l參數(shù)
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )