欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:c++ cmake 編譯教程

柚子快報(bào)邀請(qǐng)碼778899分享:c++ cmake 編譯教程

http://yzkb.51969.com/

參考鏈接:cmake使用詳細(xì)教程(日常使用這一篇就足夠了)_cmake教程-CSDN博客

?一、只有一個(gè)源文件的程序編譯

首先在當(dāng)前目錄下創(chuàng)建兩個(gè)文件

hello.cpp

CMakeLists.txt (注意CMakeLists大小寫(xiě),不要寫(xiě)錯(cuò)了)

cmake_minimum_required (VERSION 2.8)

project (learn_cmake)

add_executable(hello hello.cpp)

第一行意思是cmake最低版本要求2.8,第二行是本項(xiàng)目的工程名第三行:第一個(gè)變量:要生成的可執(zhí)行文件名為hello,后面的參數(shù)是需要的依賴(lài)。

接著在當(dāng)前目錄下執(zhí)行 cmake .?接著會(huì)發(fā)現(xiàn)目錄下多生成了一些文件,例如Makefile,然后使用GNU?make命令來(lái)編譯程序,會(huì)生成可執(zhí)行程序。

二、同一目錄下多個(gè)源文件

此時(shí)在當(dāng)前目錄新增兩個(gè)依賴(lài),并mian函數(shù)的執(zhí)行需要依賴(lài)這兩個(gè)文件

add.cpp

add.h

只需要在CMakeLists.txt中添加所依賴(lài)的.cpp文件,編譯步驟和上面相同。

cmake_minimum_required (VERSION 2.8)

project (learn_cmake)

add_executable(hello hello.cpp myadd.cpp)

三、同一目錄下很多源文件

如果同一目錄下有無(wú)窮多源文件,那么一個(gè)一個(gè)添加就很慢了。此時(shí)可以使用cmake中的函數(shù)存儲(chǔ)這些源文件

aux_source_directory(dir var)

他的作用是把dir目錄中的所有源文件都儲(chǔ)存在var變量中

然后需要用到源文件的地方用 變量var來(lái)取代

此時(shí) CMakeLists.txt 可以這樣優(yōu)化

cmake_minimum_required(VERSION 2.8)

project(learn_cmake)

aux_source_directory(. SRC_LIST)

add_executable(hello ${SRC_LIST})

四、頭文件在別的文件夾

對(duì)于集中的頭文件,CMake提供了一個(gè)很方便的函數(shù)

include_directories ( dir )

他的作用是 自動(dòng)去dir目錄下尋找頭文件,相當(dāng)于 gcc中的?gcc?-I dir

此時(shí)?CMakeLists.txt?可以這樣優(yōu)化

cmake_minimum_required(VERSION 2.8)

project(learn_cmake)

aux_source_directory(. SRC_LIST)

include_directories(./inc_dir)

add_executable(hello ${SRC_LIST})

?五、頭文件源文件分離,并含有多個(gè)文件夾

假如說(shuō)當(dāng)前的工程目錄是這樣的,頭文件和源文件分離,并含有多個(gè)文件夾

此時(shí)?CMakeLists.txt?可以這樣優(yōu)化

cmake_minimum_required(VERSION 2.8)

project(learn_cmake)

aux_source_directory(src_dir1 SRC_LIST1)

aux_source_directory(src_dir2 SRC_LIST2)

aux_source_directory(main_dir MAIN_DIR)

include_directories(./inc_dir1 ./inc_dir2)

add_executable(hello ${SRC_LIST1} ${SRC_LIST2} ${MAIN_DIR})

六、生成動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

假如說(shuō)當(dāng)前的項(xiàng)目目錄是這樣的

inc目錄下存放頭文件src目錄下存放源文件lib目錄下存放生成的庫(kù)build目錄下存放構(gòu)建項(xiàng)目相關(guān)的文件,如CMakeLists.txt。而稍后我們也在這個(gè)目錄下執(zhí)行cmake和make

?

?此時(shí)?CMakeLists.txt?可以這樣優(yōu)化

cmake_minimum_required(VERSION 2.8)

project(learn_lib)

#整合源文件

aux_source_directory(${PROJECT_BINARY_DIR}/../src SRC_LIST)

#引入頭文件路徑

include_directories(${PROJECT_BINARY_DIR}/../inc)

#生成靜態(tài)庫(kù)或者動(dòng)態(tài)庫(kù) 參數(shù)1:生成的庫(kù)的名稱(chēng) 參數(shù)2:靜態(tài)或動(dòng)態(tài) 參數(shù)3:生成庫(kù)所需要的源文件

add_library(func_shared SHARED ${SRC_LIST})

add_library(func_static STATIC ${SRC_LIST})

#設(shè)置最終生成的庫(kù)的名稱(chēng)

set_target_properties(func_shared PROPERTIES OUTPUT_NAME "myfunc")

set_target_properties(func_static PROPERTIES OUTPUT_NAME "myfunc")

#設(shè)置生成的庫(kù)的路徑

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../lib)

開(kāi)始編譯:

在build目錄下執(zhí)行 cmake .在build目錄下執(zhí)行 make查看lib目錄下是否生成庫(kù)文件,

出現(xiàn)庫(kù)文件就算編譯成功

七、鏈接庫(kù)文件

庫(kù)文件目錄結(jié)構(gòu)如下:

lib目錄下存放靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)main_src目錄下存放main函數(shù)相關(guān)的源文件bin目錄存放項(xiàng)目生成的可執(zhí)行文件

?此時(shí)?CMakeLists.txt?可以這樣寫(xiě)

cmake_minimum_required(VERSION 2.8)

project(learn_lib)

#整合源文件

aux_source_directory(${PROJECT_BINARY_DIR}/../main_src MAIN_SRC)

#引入頭文件路徑

include_directories(${PROJECT_BINARY_DIR}/../inc)

#生成靜態(tài)庫(kù)或者動(dòng)態(tài)庫(kù) 參數(shù)1:生成的庫(kù)的名稱(chēng) 參數(shù)2:靜態(tài)或動(dòng)態(tài) 參數(shù)3:生成庫(kù)所需要的源文件

add_library(func_shared SHARED ${SRC_LIST})

add_library(func_static STATIC ${SRC_LIST})

#設(shè)置最終生成的庫(kù)的名稱(chēng)

set_target_properties(func_shared PROPERTIES OUTPUT_NAME "myfunc")

set_target_properties(func_static PROPERTIES OUTPUT_NAME "myfunc")

#設(shè)置生成的庫(kù)的路徑

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../lib)

#查找?guī)煳募?第一個(gè)參數(shù):存儲(chǔ)查找到的庫(kù)文件 第二個(gè)參數(shù):要查找的庫(kù)文件 第三個(gè)參數(shù):要查找的目錄

find_library(FUNC_LIB myfunc ${PROJECT_BINARY_DIR}/../lib)

#設(shè)置可執(zhí)行文件生成到哪里

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../bin)

add_executable(hello ${MAIN_SRC})

target_link_libraries(hello ${FUNC_LIB})

八、如何選擇動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

選擇生成動(dòng)態(tài)庫(kù)(Dynamic Link Library,DLL 在 Windows 上,Shared Object,.so 在 Unix/Linux 上,或 Dynamic Library,.dylib 在 macOS 上)還是靜態(tài)庫(kù)(Library Archive,.a 或 .lib)主要取決于以下幾個(gè)因素:

動(dòng)態(tài)庫(kù)的優(yōu)點(diǎn):

資源占用:?動(dòng)態(tài)庫(kù)在多個(gè)程序間共享相同的代碼,可以節(jié)省系統(tǒng)內(nèi)存和磁盤(pán)空間,因?yàn)椴恍枰獮槊總€(gè)使用該庫(kù)的應(yīng)用程序復(fù)制整個(gè)庫(kù)。更新方便:?更新動(dòng)態(tài)庫(kù)時(shí),所有依賴(lài)它的應(yīng)用程序都會(huì)自動(dòng)使用新版本,無(wú)需重新編譯或分發(fā)應(yīng)用程序。模塊化:?動(dòng)態(tài)庫(kù)可以更容易地實(shí)現(xiàn)模塊化編程,允許在運(yùn)行時(shí)加載或卸載庫(kù),增強(qiáng)程序的靈活性和擴(kuò)展性。性能:?盡管啟動(dòng)時(shí)可能需要一些額外的時(shí)間來(lái)解析動(dòng)態(tài)庫(kù)中的符號(hào),但在頻繁調(diào)用的情況下,動(dòng)態(tài)鏈接可能會(huì)更快,因?yàn)樗苊饬遂o態(tài)鏈接中的冗余代碼。

靜態(tài)庫(kù)的優(yōu)點(diǎn):

部署簡(jiǎn)單:?使用靜態(tài)庫(kù)的程序是自包含的,不需要在目標(biāo)機(jī)器上存在額外的庫(kù)文件。可靠性:?不會(huì)受到“依賴(lài)地獄”問(wèn)題的影響,即不會(huì)因?yàn)槿鄙賱?dòng)態(tài)庫(kù)或者動(dòng)態(tài)庫(kù)版本不匹配而導(dǎo)致程序崩潰。安全性:?避免了由于動(dòng)態(tài)庫(kù)被惡意替換而導(dǎo)致的安全風(fēng)險(xiǎn)。兼容性:?特別是在嵌入式系統(tǒng)或資源受限的環(huán)境中,靜態(tài)鏈接可以確保軟件的完整性和最小化依賴(lài)。

選擇策略:

如果庫(kù)的使用者需要減少最終可執(zhí)行文件的分發(fā)復(fù)雜度,或者目標(biāo)平臺(tái)資源有限,靜態(tài)庫(kù)可能是更好的選擇。如果庫(kù)需要在多個(gè)應(yīng)用之間共享,或者希望簡(jiǎn)化庫(kù)的更新流程,動(dòng)態(tài)庫(kù)更為合適。

柚子快報(bào)邀請(qǐng)碼778899分享:c++ cmake 編譯教程

http://yzkb.51969.com/

好文推薦

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19592035.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄