AndroidStudio2.2以后Android.mk轉(zhuǎn)換成CMakeLists.text

最近在做項(xiàng)目的時(shí)候用到了一個(gè)比較老的用Android.mk生成so庫的項(xiàng)目,由于是比較老的版本做的并不支持能夠在C部分打斷點(diǎn)調(diào)試,所以就花了點(diǎn)時(shí)間研究怎么將Android.mk文件轉(zhuǎn)換成CMakeList.txt文件。

1.在主項(xiàng)目下添加CMakeList.txt文件,如果沒有模板可參考如下:

cmake_minimum_required(VERSION 3.4.1)

add_library(? native-lib? SHARED? ?src/main/cpp/native-lib.cpp )

find_library( log-lib? ?log )

target_link_libraries( native-lib ${log-lib} )

2.在主項(xiàng)目的build.gradle文件中添加

externalNativeBuild { cmake { path "CMakeLists.txt" }}

defaultConfig {

...

? ? ?externalNativeBuild {

cmake {

cppFlags "-std=c++11 -std=gnu++11"

arguments '-DANDROID_STL=gnustl_static'

}

}

}

3.具體語法:

include $(CLEAR_VARS)

LOCAL_MODULE := DeflatingDecompressor-v3

LOCAL_SRC_FILES := DeflatingDecompressor/DeflatingDecompressor.cpp

LOCAL_LDLIBS := -lz

include $(BUILD_SHARED_LIBRARY)

其中:

LOCAL_MODULE后面的表示項(xiàng)目的名稱(不用加lib前綴,系統(tǒng)會自動添加),就是add_library方法的第一個(gè)參數(shù);

LOCAL_SRC_FILES后面的表示的所要要到的源文件:導(dǎo)入的是add_library的第三個(gè)參數(shù),應(yīng)該把所有的源文件都寫進(jìn)去,用空格隔開,文件的路徑應(yīng)比較完整;

BUILD_SHARED_LIBRARY:表示導(dǎo)入的是add_library的第二個(gè)參數(shù):(BUILD_STATIC_LIBRARY表示導(dǎo)入的是靜態(tài)庫,可不寫,如果寫的話就是(IMPORT);BUILD_SHARED_LIBRARY表示生成的是動態(tài)庫,SHARED)

其他:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(EXPAT_DIR)

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(EXPAT_DIR)/lib

LOCAL_C_INCLUDES:表示導(dǎo)入頭文件

LOCAL_EXPORT_C_INCLUDES:導(dǎo)入其他頭文件;

兩者轉(zhuǎn)換成CMakeList語法是:link_directories(..)參數(shù)為頭文件的目錄地址,如果有多個(gè)用空格分開

LOCAL_CFLAGS := -DHAVE_EXPAT_CONFIG_H

轉(zhuǎn)換為add_definitions(-DHAVE_EXPAT_CONFIG_H) 括號內(nèi)的內(nèi)容同LOCAL_CFLAGS后的內(nèi)容;

LOCAL_LDLIBS := -lz -llog

LOCAL_STATIC_LIBRARIES := expat

兩者都是表示關(guān)聯(lián)庫文件,上面的是導(dǎo)入ndk內(nèi)的庫,需要通過find_library來先找到庫文件;下面的表示關(guān)聯(lián)靜態(tài)庫。可以用target_link_libraries(DeflatingDecompressor-v3 ${log-lib} ${z-lib} expat) 第一個(gè)參數(shù)要關(guān)聯(lián)的目標(biāo)庫文件,其他的參數(shù)問需要關(guān)聯(lián)的參數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容