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

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:c++ cmake 編譯教程

柚子快報邀請碼778899分享:c++ cmake 編譯教程

http://yzkb.51969.com/

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

?一、只有一個源文件的程序編譯

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

hello.cpp

CMakeLists.txt (注意CMakeLists大小寫,不要寫錯了)

cmake_minimum_required (VERSION 2.8)

project (learn_cmake)

add_executable(hello hello.cpp)

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

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

二、同一目錄下多個源文件

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

add.cpp

add.h

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

cmake_minimum_required (VERSION 2.8)

project (learn_cmake)

add_executable(hello hello.cpp myadd.cpp)

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

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

aux_source_directory(dir var)

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

然后需要用到源文件的地方用 變量var來取代

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

cmake_minimum_required(VERSION 2.8)

project(learn_cmake)

aux_source_directory(. SRC_LIST)

add_executable(hello ${SRC_LIST})

四、頭文件在別的文件夾

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

include_directories ( dir )

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

此時?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})

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

假如說當前的工程目錄是這樣的,頭文件和源文件分離,并含有多個文件夾

此時?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})

六、生成動態(tài)庫和靜態(tài)庫

假如說當前的項目目錄是這樣的

inc目錄下存放頭文件src目錄下存放源文件lib目錄下存放生成的庫build目錄下存放構建項目相關的文件,如CMakeLists.txt。而稍后我們也在這個目錄下執(zhí)行cmake和make

?

?此時?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)庫或者動態(tài)庫 參數(shù)1:生成的庫的名稱 參數(shù)2:靜態(tài)或動態(tài) 參數(shù)3:生成庫所需要的源文件

add_library(func_shared SHARED ${SRC_LIST})

add_library(func_static STATIC ${SRC_LIST})

#設置最終生成的庫的名稱

set_target_properties(func_shared PROPERTIES OUTPUT_NAME "myfunc")

set_target_properties(func_static PROPERTIES OUTPUT_NAME "myfunc")

#設置生成的庫的路徑

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

開始編譯:

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

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

七、鏈接庫文件

庫文件目錄結構如下:

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

?此時?CMakeLists.txt?可以這樣寫

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)庫或者動態(tài)庫 參數(shù)1:生成的庫的名稱 參數(shù)2:靜態(tài)或動態(tài) 參數(shù)3:生成庫所需要的源文件

add_library(func_shared SHARED ${SRC_LIST})

add_library(func_static STATIC ${SRC_LIST})

#設置最終生成的庫的名稱

set_target_properties(func_shared PROPERTIES OUTPUT_NAME "myfunc")

set_target_properties(func_static PROPERTIES OUTPUT_NAME "myfunc")

#設置生成的庫的路徑

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

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

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

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

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

add_executable(hello ${MAIN_SRC})

target_link_libraries(hello ${FUNC_LIB})

八、如何選擇動態(tài)庫和靜態(tài)庫

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

動態(tài)庫的優(yōu)點:

資源占用:?動態(tài)庫在多個程序間共享相同的代碼,可以節(jié)省系統(tǒng)內(nèi)存和磁盤空間,因為不需要為每個使用該庫的應用程序復制整個庫。更新方便:?更新動態(tài)庫時,所有依賴它的應用程序都會自動使用新版本,無需重新編譯或分發(fā)應用程序。模塊化:?動態(tài)庫可以更容易地實現(xiàn)模塊化編程,允許在運行時加載或卸載庫,增強程序的靈活性和擴展性。性能:?盡管啟動時可能需要一些額外的時間來解析動態(tài)庫中的符號,但在頻繁調(diào)用的情況下,動態(tài)鏈接可能會更快,因為它避免了靜態(tài)鏈接中的冗余代碼。

靜態(tài)庫的優(yōu)點:

部署簡單:?使用靜態(tài)庫的程序是自包含的,不需要在目標機器上存在額外的庫文件??煽啃裕?不會受到“依賴地獄”問題的影響,即不會因為缺少動態(tài)庫或者動態(tài)庫版本不匹配而導致程序崩潰。安全性:?避免了由于動態(tài)庫被惡意替換而導致的安全風險。兼容性:?特別是在嵌入式系統(tǒng)或資源受限的環(huán)境中,靜態(tài)鏈接可以確保軟件的完整性和最小化依賴。

選擇策略:

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

柚子快報邀請碼778899分享:c++ cmake 編譯教程

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

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

轉載請注明,如有侵權,聯(lián)系刪除。

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

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄