欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Modern CMake 簡(jiǎn)單使用

Modern CMake 簡(jiǎn)單使用

目錄結(jié)構(gòu)

成都創(chuàng)新互聯(lián)是專業(yè)的驛城網(wǎng)站建設(shè)公司,驛城接單;提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行驛城網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

├── CMakeLists.txt
├── main.cpp
└── threadpool
├── CMakeLists.txt
├── threadpool.cpp
└── threadpool.h

第1個(gè)CMakeLists.txt

#設(shè)置cmake最小版本
cmake_minimum_required(VERSION 3.21)

#設(shè)置工程名 版本
project(test_tp VERSION 0.0.1)

message("PROJECT_NAME: ${PROJECT_NAME}")
message("PROJECT_VERSION: ${PROJECT_VERSION}")
message("PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")
message("PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}")
message("test_tp_VERSION:${test_tp_VERSION}")
message("test_tp_SOURCE_DIR: ${test_tp_SOURCE_DIR}")
message("test_tp_BINARY_DIR:${test_tp_BINARY_DIR}")

if (PROJECT_BINARY_DIR STREQUAL PROJECT_SOURCE_DIR)
    message(MARNING "The binary directory of CMake cannot be the same as source directory.")
endif ()

#設(shè)置成Release模式
set(CMAKE_BUILD_TYPE Release)

#設(shè)置C++標(biāo)準(zhǔn)版本--C++20
set(CMAKE_CXX_STANDARD 20)
#CMAKE_CXX_STANDARD_REQUIRED--默認(rèn)OFF。表示是否一定要支持你指定的 C++ 標(biāo)準(zhǔn)
#如果為OFF則CMake檢測(cè)到編譯器不支持C++20時(shí)不報(bào)錯(cuò),會(huì)使用上一版本;為ON則發(fā)現(xiàn)不支持報(bào)錯(cuò),更安全。
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#CMAKE_CXX_EXTENSIONS默認(rèn)為ON。設(shè)為ON表示啟用GCC特有的一些擴(kuò)展功能;OFF則關(guān)閉GCC的擴(kuò)展功能,只使用標(biāo)準(zhǔn)的C++。
#要兼容其他編譯器(如 MSVC)的項(xiàng)目,都會(huì)設(shè)為OFF防止不小心用了GCC才有的特性。
set(CMAKE_CXX_EXTENSIONS OFF)

#添加子目錄
add_subdirectory(threadpool)

#設(shè)置目標(biāo)編譯成二進(jìn)制可執(zhí)行文件,文件名為test_tp
add_executable(test_tp)

#鏈接源文件
#CMAKE_CURRENT_SOURCE_DIR表示當(dāng)前CMakeLists.txt所在的目錄
#target_sources(test_tp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
#或者
#aux_source_directory(< dir > < variable >) 查找在某個(gè)路徑下的所有源文件
aux_source_directory(. SRC_LIST) # 搜索當(dāng)前目錄下的所有.cpp文件
target_sources(test_tp PRIVATE ${SRC_LIST})

#鏈接庫(kù)
target_link_libraries(test_tp PRIVATE ThreadPool)

第2個(gè)CMakeLists.txt

message("threadpool CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")

#設(shè)置作為對(duì)象庫(kù)(OBJECT)--對(duì)象庫(kù)類似于靜態(tài)庫(kù),但不生成 .a 文件,只由 CMake 記住該庫(kù)生成了哪些對(duì)象文件對(duì)象庫(kù)是 CMake 自創(chuàng)的,繞開了編譯器和操作系統(tǒng)的各種繁瑣規(guī)則,保證了跨平臺(tái)統(tǒng)一性。
#SHARED--編譯動(dòng)態(tài)庫(kù)--add_library(ThreadPool SHARED)
#STATIC--編譯靜態(tài)庫(kù)--add_library(ThreadPool STATIC)
add_library(ThreadPool OBJECT)

#查找依賴庫(kù)
find_package(Threads REQUIRED)

#鏈接源文件
#CMAKE_CURRENT_SOURCE_DIR表示當(dāng)前CMakeLists.txt所在的目錄
target_sources(ThreadPool PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/threadpool.cpp)

#鏈接庫(kù)
target_link_libraries(ThreadPool PRIVATE Threads::Threads)

#設(shè)置讓引用或者依賴ThreadPool的能自動(dòng)包含當(dāng)前目錄
#主要是設(shè)置當(dāng)前庫(kù)的頭文件對(duì)依賴它的生效,讓其他依賴這個(gè)庫(kù)的,能找到相關(guān)頭文件
#INTERFACE意味著消費(fèi)者需要但生產(chǎn)者不需要的東西
target_include_directories(ThreadPool INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

常用命令:

  1. cmake -B build 在源碼目錄用 -B 直接創(chuàng)建 build 目錄并生成 build/Makefile
  2. cmake --build build -j4 自動(dòng)調(diào)用本地的構(gòu)建系統(tǒng)在 build 里構(gòu)建,即:make -C build -j4
  3. sudo cmake --build build --target install 調(diào)用本地的構(gòu)建系統(tǒng)執(zhí)行 install 這個(gè)目標(biāo),即安裝

CMAKE_BUILD_TYPE 構(gòu)建的類型,調(diào)試模式還是發(fā)布模式

  • CMAKE_BUILD_TYPE 是 CMake 中一個(gè)特殊的變量,用于控制構(gòu)建類型,他的值可以是:
  • Debug 調(diào)試模式,完全不優(yōu)化,生成調(diào)試信息,方便調(diào)試程序
  • Release 發(fā)布模式,優(yōu)化程度最高,性能最佳,但是編譯比 Debug 慢
  • MinSizeRel 最小體積發(fā)布,生成的文件比 Release 更小,不完全優(yōu)化,減少二進(jìn)制體積
  • RelWithDebInfo 帶調(diào)試信息發(fā)布,生成的文件比 Release 更大,因?yàn)閹в姓{(diào)試的符號(hào)信息
  • 默認(rèn)情況下 CMAKE_BUILD_TYPE 為空字符串,這時(shí)相當(dāng)于 Debug。

操作:

  1. 在配置build時(shí),cmake -B build -DCMAKE_BUILD_TYPE=Release. 注意:在配置階段可以通過(guò) -D 設(shè)置緩存變量。第二次配置時(shí),之前的 -D 添加仍然會(huì)被保留。也就是如果設(shè)置了Release后,要變回Debug,需要再次執(zhí)行cmake -B build -DCMAKE_BUILD_TYPE=Debug
  2. 在CMakeLists.txt中設(shè)置set(CMAKE_BUILD_TYPE Release)

PUBLIC,PRIVATE,INTERFACE,定義了Target屬性的傳遞范圍

  • PUBLIC 對(duì)于可執(zhí)行文件而言意義不大,對(duì)于庫(kù)來(lái)說(shuō),它讓 CMake 知道鏈接這個(gè)目標(biāo)的目標(biāo)也需要這個(gè)。也就是 “我自己要用,其他鏈接我的也要用”,具有傳遞性
  • PRIVATE 表示 “我自己用,其他人不用”
  • INTERFACE 表示 “我自己不用,其他鏈接我的要用”

分享標(biāo)題:Modern CMake 簡(jiǎn)單使用
分享路徑:http://chinadenli.net/article46/dsoihhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站排名、企業(yè)建站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管