真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Modern CMake 簡單使用

Modern CMake 簡單使用

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

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

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

第1個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++20時不報錯,會使用上一版本;為ON則發(fā)現(xiàn)不支持報錯,更安全。
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#CMAKE_CXX_EXTENSIONS默認(rèn)為ON。設(shè)為ON表示啟用GCC特有的一些擴展功能;OFF則關(guān)閉GCC的擴展功能,只使用標(biāo)準(zhǔn)的C++。
#要兼容其他編譯器(如 MSVC)的項目,都會設(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 >) 查找在某個路徑下的所有源文件
aux_source_directory(. SRC_LIST) # 搜索當(dāng)前目錄下的所有.cpp文件
target_sources(test_tp PRIVATE ${SRC_LIST})

#鏈接庫
target_link_libraries(test_tp PRIVATE ThreadPool)

第2個CMakeLists.txt

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

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

#查找依賴庫
find_package(Threads REQUIRED)

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

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

#設(shè)置讓引用或者依賴ThreadPool的能自動包含當(dāng)前目錄
#主要是設(shè)置當(dāng)前庫的頭文件對依賴它的生效,讓其他依賴這個庫的,能找到相關(guān)頭文件
#INTERFACE意味著消費者需要但生產(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 自動調(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 這個目標(biāo),即安裝

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

  • CMAKE_BUILD_TYPE 是 CMake 中一個特殊的變量,用于控制構(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 更大,因為帶有調(diào)試的符號信息
  • 默認(rèn)情況下 CMAKE_BUILD_TYPE 為空字符串,這時相當(dāng)于 Debug。

操作:

  1. 在配置build時,cmake -B build -DCMAKE_BUILD_TYPE=Release. 注意:在配置階段可以通過 -D 設(shè)置緩存變量。第二次配置時,之前的 -D 添加仍然會被保留。也就是如果設(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 對于可執(zhí)行文件而言意義不大,對于庫來說,它讓 CMake 知道鏈接這個目標(biāo)的目標(biāo)也需要這個。也就是 “我自己要用,其他鏈接我的也要用”,具有傳遞性
  • PRIVATE 表示 “我自己用,其他人不用”
  • INTERFACE 表示 “我自己不用,其他鏈接我的要用”

分享文章:Modern CMake 簡單使用
當(dāng)前路徑:http://weahome.cn/article/dsoihhg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部