NDK CMakeList常用命令

1.cmake_minimum_required(VERSION 3.4.1) # 指定最低支持版本
2.aux_source_directory(. DIR_SRCS)
查找(第一個參數(shù).)當(dāng)前目錄所有源文件,并將源文件名稱列表保存到(第二個參數(shù))DIR_SRCS變量
不能查找字目錄
3.add_library
添加一個庫名為<name>
指定STATIC,SHAREN,MODULE參數(shù)來指定庫的類型。STATIC:靜態(tài)庫;SHARED:動態(tài)庫,MOULE:在使用dyld的系統(tǒng)有效,若不支持dyld,等同于SHARED。
EXCLUDE_FROM_ALL:標(biāo)識該庫不會被默認(rèn)構(gòu)建。
source1 source2…… sourceN:用來指定庫的源文件

add_library(<name> [STATIC | SHARED | MODULE] 
[EXCLUDE_FROM_ALL] source1 source2 ……sourceN}

導(dǎo)入預(yù)編譯庫
添加一個已存在的預(yù)編譯庫,名為<name>。
一般配合set_target_properties使用

add_library(test SHARED IMPORTED)
  set_target_properties(
  test #指名目標(biāo)庫名
  PROPERTIES IMPORTED_LOCATION #指明要設(shè)置的參  數(shù)庫路徑/${ANDROID_API}/libtest.so #導(dǎo)入庫的路徑
)

4.設(shè)置CMake變量

#設(shè)置可執(zhí)行文件的輸出路徑(EXCUTABLE_OUTPUT_PATH是全局變量)
set(EXECUTABLE_OUTPUT_PATH[output_path])

#設(shè)置庫文件的輸出路徑(LIBRARY_OUTPUT_PTAH 是全局變量)
set(LIBRARY_OUTPUT_PTAH [output_path])

#設(shè)置C++編譯參數(shù)(CMAKE_CXX_FLAGSs是全局變量)
set(CMAKE_CXX_FLAGS "-Wall std=c++11")

#設(shè)置源文件集合(SOURCE_FILES是本地變量即自定義變量)
set(SOURCE_FILES main.cpp test.cpp ...)

5.設(shè)置頭文件目錄,相當(dāng)于g++選項中的-i參數(shù)

#可以用相對或絕對路徑,也可以用自定義的變量值
include_directories(./include ${MY_INCLUDE})

6.添加可執(zhí)行文件

add_executable(<name> ${SRC_LIST})

7.將若干個庫連接到目標(biāo)庫文件。連接的順序應(yīng)當(dāng)符合gcc鏈接順序的規(guī)則,被鏈接的庫放在依賴他的庫的后面,即如果上面的命令,lib1依賴于lib2,lib2又依賴于lib3,則在下面命令中必須嚴(yán)格按照lib1 lib2 lib3 的順序排列,否則會報錯

target_link_libraries(<name> lib1 lib2 lib3)
#如果出現(xiàn)互相依賴的靜態(tài)庫,CMake會允許依賴途中的包含循環(huán)依賴,如:
add_library(A STATIC a.c)
add_library(B STATIC b.c)
target_link_libraries(A B)
target_link_libraries(B A)
add_executable(main main.c)
target_link_libraries(main A)

8.為當(dāng)前路徑以及子目錄的源文件加入由-D引入的define flag

add_definitions(-DFOO -DDEBUG ...)

9.如果當(dāng)前目錄下還有子目錄時可以使用add_subdirectory,子目錄中也需要包含有CMakeLists.text

#sub_dir指定包含CMakeLists.txt和源碼文件的子目錄位置
#binary_dir是輸入路徑,一般可以不指定
add_subdirecroty(sub_dir [binary_dir])

10.文件操作命令

#將message 寫入filename文件中,會覆蓋文件原有內(nèi)容
file(WRITE filename "message")
#將message寫入filename文件中,會追加在文件末尾
file(APPEND filename "message")
#從filename文件中讀取內(nèi)容并存儲到var 變量中,如果指定了numBytes 和offset
#則從offset處開始最多讀numBytes個字節(jié),另外如果指定了HEX 參數(shù),則內(nèi)容會議十六進(jìn)制形式存儲在var變量中
file(READ filename var [LIMIT numBytes] [OFFSET offset] [HEX])
#重命名文件
file(RENAME <oldname> <newname>)
#刪除文件,等于rm
file(REMOVE [file1 ...])
#遞歸的執(zhí)行刪除文件命令,等于 rm -r
file(REMOVE_RECURSE [file1 ...])
#根據(jù)指定的url下載文件
#timeout 超時時間;下載的狀態(tài)會保留在status中;下載日志會被保存到log;sum指定所下載文件逾期的MD5值,如果指定會自動進(jìn)行比對,
#如果不一致,則返回一個錯誤;SHOW_PROGRESS,進(jìn)度信息會議狀態(tài)信息的形式被打印出來
file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log] [EXPECTED_MD5 sun] [SHOW_PROGRESS])
#創(chuàng)建目錄
file(MAKE_DIRECTORY [dir1 dir2 ...])
#會把path轉(zhuǎn)換為以unix的/開頭的cmake風(fēng)格路徑,保存在result中
file(TO_CMAKE_PATH path result)
#它會把cmake風(fēng)格的路徑轉(zhuǎn)換為本地路徑風(fēng)格:windows下用"\",而unix下用"/"
file(TO_NATIVE_PATH path result)
#將會為所有匹配查詢表達(dá)式的文件生成一個文件list,并將該list存儲進(jìn)變量variable里,如果一個表達(dá)式指定了RELATIVE,返回的結(jié)果將會相對于給定路徑的相對路徑,查詢表達(dá)式例子:*.cxx,*.vt?
#NOTE:按照官方文檔的說法,不建議使用file的GLOB指令來手機(jī)工程的源文件
file(GLOB variable [RELATIVE path] [globbing expressions]...)

11.設(shè)置某個路徑的一種屬性
prop1,prop2代表屬性,取值為:INCLUDE_DIRECTORIES LINK_DIRECTORIES INCLUDE_REGULAR_EXPRESSION ADDITIONAL_MAKE_CLEAN_FILES

set_directory_properties(PROPERTIES prop1 value1 prop2 value2)

12.在給定的作用域內(nèi)設(shè)置一個命名的屬性,PROPERTY參數(shù)是必須的,第一個參數(shù)決定了屬性可以影響的作用域:
GLOBAL: 全局作用域
DIRECTORY:默認(rèn)當(dāng)前路徑,也可以用[dir]指定路徑
TARGET:目標(biāo)作用域,可以是0個活多個已有目標(biāo)
SOURCE:源文件作用域,可以是0個活多個源文件
TEST:測試作用域,可以是0個或多個已有的測試
CACHE:必須指定0個或多個cache中已有的條目

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

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

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,981評論 0 9
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評論 0 5
  • 運行操作 CMD命令:開始->運行->鍵入cmd或command(在命令行里可以看到系統(tǒng)版本、文件系統(tǒng)版本) CM...
    小明yz閱讀 3,004評論 0 8
  • CMake 全稱“cross platform make”,是開源、跨平臺的自動化構(gòu)建系統(tǒng)。CMake 由 Kit...
    神齊閱讀 4,300評論 0 6
  • 為了將C/C++代碼轉(zhuǎn)換為可以在硬件上運行的程序,需要經(jīng)過編譯和鏈接。編譯是將高級語言所寫的源程序翻譯成等價的機(jī)器...
    WalkeR_ZG閱讀 9,963評論 0 15

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