CMakeList 文件
使用AS創(chuàng)建一個(gè)C/C++ support的項(xiàng)目,會(huì)默認(rèn)在app/src/main 目錄下生產(chǎn)cpp目錄,里面包含CMakeLists.txt 和 native-lib
.cpp.
下邊為CMakeLists.txt去掉英文注釋格式化后的內(nèi)容
cmake_minimum_required(Version 3.4.1)
add_library(
? ? ? ? ? native-lib
? ? ? ? ? SHARED
? ? ? ? ? native-lib.cpp
)
find_library(
? ? ? ? ? log-lib
? ? ? ? ? log
)
target_link_libraries(
? ? ? ? ? ?native-lib
? ? ? ? ? ?${log-lib}
)
?
常用命令:
cmake_minimum_required(3.4.1)?
支持的最低版本
?
aux_source_directory(. DIR_SRCS) ?
查找當(dāng)前目錄所有源文件,并將源文件名稱列表保持到 DIR_SRCS 變量
不能查找子目錄
?
add_library
添加一個(gè)庫(kù)
add_library(<name> [STATIC| SHARD | MODULE] [EXCLUDE_FORM_ALL] source1 source2 .. sourceN)
添加一個(gè)庫(kù)文件,名為<name>
指定STATIC、 SHARD、 MIDULE 參數(shù)來(lái)指定庫(kù)的類型 STATIC 靜態(tài)庫(kù); SHARD 動(dòng)態(tài)庫(kù);MODULE:在使用dyld的系統(tǒng)有效,若不支持dyld,等同于 SHARD
EXCLUDE_FORM_ALL:表示該庫(kù)不會(huì)被默認(rèn)構(gòu)建
soruce1 source2.... sourceN:指定庫(kù)的源文件
?
導(dǎo)入預(yù)編譯庫(kù)
add_library(<name> <SHARED | STATIC | MODULE | UNKNOWN> IMPORTED)
添加一個(gè)已存在的預(yù)編譯庫(kù),名為<name>
一般配合 set_target_properties 使用
比如:
add_library(test SHARD IMPORTED)
set_target_properties(
? ? test #指定目標(biāo)庫(kù)名
? ? PROPERTIES IMPORTED_LOACATION #指明要設(shè)置的參數(shù)庫(kù)路徑
? ? /${ANDROID_ABI}/libtest.so #導(dǎo)入庫(kù)的路徑
)
?
set
設(shè)置變量
#設(shè)置可執(zhí)行文件的輸出路徑 EXCUTABLE_OUTPUT_PATH是全局變量
set(EXCUTABLE_OUTPUT_PATH [output_path])
#設(shè)置庫(kù)文件的輸出路徑 LIBARARY_OUTPUT_PATH 是全局變量
set(LIBARARY_OUTPUT_PATH ?[output_path])
#設(shè)置C++ 編譯參數(shù)
set(CMAKE_CXX_FLAGS "-Wall std=c++11")
#設(shè)置源文件集合
ser(SOURCE_FILES main.cpp test.cpp ...)
?
include_directories
設(shè)置頭文件目錄,相當(dāng)于g++ 選項(xiàng)中的 -I 參數(shù)
# 可以使用相對(duì)路徑或絕對(duì)路徑,也可以使用自定義的變量值
include_dirctories(./inuclude ${MY_INCLUDE})
?
add_excutable
添加可執(zhí)行文件
add_excutable(<name> ${SRC_LIST})
?
tartget_list_libraries
將若干庫(kù)鏈接到目標(biāo)庫(kù)文件
鏈接的順序應(yīng)當(dāng)符合gcc鏈接順序規(guī)則,被鏈接的庫(kù)放在依賴他的庫(kù)的后面。
target_link_libarries(<name> lib1 lib2 lib3)
# 如果出現(xiàn)相互依賴的靜態(tài)庫(kù), CMake會(huì)允許依賴庫(kù)中包含循環(huán)依賴
add_library(A STATIC a.c)
add_libarry(B STATIC b.c)
target_link_libraries(A B)
target_link_libraries(B A)
add_executable(main main.c)
target_link_libraries(main A)
?
add_subdirctory
如果當(dāng)前目錄下還有子目錄時(shí)可以使用add_subdirectory, 子目錄中也需要包含有 CMakeLists.txt
# sub_dir 指定包含CMakeLists.txt 和源碼文件的子目錄位置
# binary_dir 是輸出路徑,一般可以不指定
add_dubdirecroty(sub_dir [binary_dir])
?
file
文件操作命令
?
set_directory_porperties
設(shè)置某個(gè)路徑的一種屬性
set_direcory_properties(PROPERTIES prop1 vaules1 prop2 values)
prop1 prop2 代碼屬性,取值為:
INCLUDE_DIRECORIES
LINK_DIRECORIES
INCLUDE_REGULAR_EXPRESSION
ADDITIONAL_MAKE_CLEAN_FILES
?
set_property
在給定的作用域內(nèi)設(shè)置一個(gè)命名的屬性
set_property(
? ? <GLOBAL | DIRECORY [dir] | TARGET [target ...] | SOURCE [ src1 ...] | TEST [test1.. ]
? ? | CACHE [entry1...]>
? ? [APPEND]
? ? PROPETY <name> [value...])?
)
??GLOBAL:全局作用域
? ??DIRECORY:默認(rèn)當(dāng)前路徑,也可以用 [dir] 指定路徑
? ??TARGET:目標(biāo)作用域,可以是0 或者多個(gè)已有目標(biāo)
SOURCE: 源文件作用域,可以是0個(gè)或多個(gè)源文件
TEST: 測(cè)試作用域,可以是0個(gè)或多個(gè)已有測(cè)試
CACHE:必須指定0個(gè)或多個(gè)cache中已有的條目
?
常見(jiàn)命令的使用
多個(gè)源文件處理
如果源文件很多,把所有文件一個(gè)一個(gè)加入很麻煩,
可以使 aux_source_directory命令或file命令,會(huì)查找指定目錄下的所有源文件,然后將結(jié)果存進(jìn)指定變量名
cmake_minimum_required(VERSINO 3.4.1)
# 查找當(dāng)前目錄所有源文件,并將名稱保存到 DIR_SRSC 變量
# 不能查找子目錄
aux_source_directory(. DIR_SRSC )
# 也可以使用file
file (GLOB DIR_SRC *.c *.cpp)
add_library(native-lib SHRAD &{DIR_SRCS})
?
多個(gè)目錄多源文件處理
?
添加預(yù)編譯庫(kù)(Android6.0 版本以前)
?
android6.0 版本以后
?
添加頭文件目錄
?
Build.gradle配置
可以在gradle中使用arguments 設(shè)置一些配置
CmakeList 配置文件
?
總結(jié)
以上是生活随笔為你收集整理的CMakeList 文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电大本科计算机考试,电大本科计算机考试
- 下一篇: 管理学入门书籍,德鲁克并不是最好的选择!