日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CMakeList 文件

發布時間:2023/12/31 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMakeList 文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用AS創建一個C/C++ support的項目,會默認在app/src/main 目錄下生產cpp目錄,里面包含CMakeLists.txt 和 native-lib

.cpp.

下邊為CMakeLists.txt去掉英文注釋格式化后的內容

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) ?

查找當前目錄所有源文件,并將源文件名稱列表保持到 DIR_SRCS 變量

不能查找子目錄

?

add_library

添加一個庫

add_library(<name> [STATIC| SHARD | MODULE] [EXCLUDE_FORM_ALL] source1 source2 .. sourceN)

添加一個庫文件,名為<name>

指定STATIC、 SHARD、 MIDULE 參數來指定庫的類型 STATIC 靜態庫; SHARD 動態庫;MODULE:在使用dyld的系統有效,若不支持dyld,等同于 SHARD

EXCLUDE_FORM_ALL:表示該庫不會被默認構建

soruce1 source2.... sourceN:指定庫的源文件

?

導入預編譯庫

add_library(<name> <SHARED | STATIC | MODULE | UNKNOWN> IMPORTED)

添加一個已存在的預編譯庫,名為<name>

一般配合 set_target_properties 使用

比如:

add_library(test SHARD IMPORTED)

set_target_properties(

? ? test #指定目標庫名

? ? PROPERTIES IMPORTED_LOACATION #指明要設置的參數庫路徑

? ? /${ANDROID_ABI}/libtest.so #導入庫的路徑

)

?

set

設置變量

#設置可執行文件的輸出路徑 EXCUTABLE_OUTPUT_PATH是全局變量

set(EXCUTABLE_OUTPUT_PATH [output_path])

#設置庫文件的輸出路徑 LIBARARY_OUTPUT_PATH 是全局變量

set(LIBARARY_OUTPUT_PATH ?[output_path])

#設置C++ 編譯參數

set(CMAKE_CXX_FLAGS "-Wall std=c++11")

#設置源文件集合

ser(SOURCE_FILES main.cpp test.cpp ...)

?

include_directories

設置頭文件目錄,相當于g++ 選項中的 -I 參數

# 可以使用相對路徑或絕對路徑,也可以使用自定義的變量值

include_dirctories(./inuclude ${MY_INCLUDE})

?

add_excutable

添加可執行文件

add_excutable(<name> ${SRC_LIST})

?

tartget_list_libraries

將若干庫鏈接到目標庫文件

鏈接的順序應當符合gcc鏈接順序規則,被鏈接的庫放在依賴他的庫的后面。

target_link_libarries(<name> lib1 lib2 lib3)

# 如果出現相互依賴的靜態庫, CMake會允許依賴庫中包含循環依賴

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

如果當前目錄下還有子目錄時可以使用add_subdirectory, 子目錄中也需要包含有 CMakeLists.txt

# sub_dir 指定包含CMakeLists.txt 和源碼文件的子目錄位置

# binary_dir 是輸出路徑,一般可以不指定

add_dubdirecroty(sub_dir [binary_dir])

?

file

文件操作命令

?

set_directory_porperties

設置某個路徑的一種屬性

set_direcory_properties(PROPERTIES prop1 vaules1 prop2 values)

prop1 prop2 代碼屬性,取值為:

INCLUDE_DIRECORIES

LINK_DIRECORIES

INCLUDE_REGULAR_EXPRESSION

ADDITIONAL_MAKE_CLEAN_FILES

?

set_property

在給定的作用域內設置一個命名的屬性

set_property(

? ? <GLOBAL | DIRECORY [dir] | TARGET [target ...] | SOURCE [ src1 ...] | TEST [test1.. ]

? ? | CACHE [entry1...]>

? ? [APPEND]

? ? PROPETY <name> [value...])?

)

??GLOBAL:全局作用域

? ??DIRECORY:默認當前路徑,也可以用 [dir] 指定路徑

? ??TARGET:目標作用域,可以是0 或者多個已有目標

SOURCE: 源文件作用域,可以是0個或多個源文件

TEST: 測試作用域,可以是0個或多個已有測試

CACHE:必須指定0個或多個cache中已有的條目

?

常見命令的使用

多個源文件處理

如果源文件很多,把所有文件一個一個加入很麻煩,

可以使 aux_source_directory命令或file命令,會查找指定目錄下的所有源文件,然后將結果存進指定變量名

cmake_minimum_required(VERSINO 3.4.1)

# 查找當前目錄所有源文件,并將名稱保存到 DIR_SRSC 變量

# 不能查找子目錄

aux_source_directory(. DIR_SRSC )

# 也可以使用file

file (GLOB DIR_SRC *.c *.cpp)

add_library(native-lib SHRAD &{DIR_SRCS})

?

多個目錄多源文件處理

?

添加預編譯庫(Android6.0 版本以前)

?

android6.0 版本以后

?

添加頭文件目錄

?

Build.gradle配置

可以在gradle中使用arguments 設置一些配置

CmakeList 配置文件

?

總結

以上是生活随笔為你收集整理的CMakeList 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。