精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 CMake 和 VSCodium 設置一個構建系統

開發 后端
這篇文章是使用開源 DevOps 工具進行 C/C++ 開發系列文章的一部分。如果你從一開始就把你的項目建立在一個功能強大的工具鏈上,你的開發會更快和更安全。除此之外,這會使別人更容易地參與你的項目。


提供一個適當的 CMake 配置文件來使其他人可以更容易地構建、使用和貢獻你的項目。


這篇文章是使用開源 DevOps 工具進行 C/C++ 開發系列文章的一部分。如果你從一開始就把你的項目建立在一個功能強大的工具鏈上,你的開發會更快和更安全。除此之外,這會使別人更容易地參與你的項目。在這篇文章中,我將搭建一個基于 ??CMake?? 和 ??VSCodium?? 的 C/C++ 構建系統。像往常一樣,相關的示例代碼可以在 ??GitHub?? 上找到。

我已經測試了在本文中描述的步驟。這是一種適用于所有平臺的解決方案。

為什么用 CMake ?

??CMake?? 是一個構建系統生成器,可以為你的項目創建 Makefile。乍一看簡單的東西可能相當地復雜。在較高的層次上,你可以定義你的項目的各個部分(可執行文件、庫)、編譯選項(C/C++ 標準、優化、架構)、依賴關系項(頭文件、庫),和文件級的項目結構。CMake 使用的這些信息可以在文件 ??CMakeLists.txt?? 中獲取,它使用一種特殊的描述性語言編寫。當 CMake 處理這個文件時,它將自動地偵測在你的系統上已安裝的編譯器,并創建一個用于啟動它的 Makefile 文件。

此外,在 ??CMakeLists.txt?? 中描述的配置,能夠被很多編輯器讀取,像 QtCreator、VSCodium/VSCode 或 Visual Studio 。

示例程序

我們的示例程序是一個簡單的命令行工具:它接受一個整數來作為參數,輸出一個從 1 到所提供輸入值的范圍內的隨機排列的數字。

$ ./Producer 10
3 8 2 7 9 1 5 10 6 4

在我們的可執行文件中的 ??main()?? 函數,我們只處理輸入的參數,如果沒有提供一個值(或者一個不能被處理的值)的話,就退出程序。

int main(int argc, char** argv){

if (argc != 2) {
std::cerr << "Enter the number of elements as argument" << std::endl;
return -1;
}

int range = 0;

try{
range = std::stoi(argv[1]);
}catch (const std::invalid_argument&){
std::cerr << "Error: Cannot parse \"" << argv[1] << "\" ";
return -1;
}

catch (const std::out_of_range&) {
std::cerr << "Error: " << argv[1] << " is out of range";
return -1;
}

if (range <= 0) {
std::cerr << "Error: Zero or negative number provided: " << argv[1];
return -1;
}

std::stringstream data;
std::cout << Generator::generate(data, range).rdbuf();
}

producer.cpp

實際的工作是在 ??生成器?? 中完成的,它將被編譯,并將作為一個靜態庫來鏈接到我們的??Producer?? 可執行文件。

std::stringstream &Generator::generate(std::stringstream &stream, const int range) {
std::vector<int> data(range);
std::iota(data.begin(), data.end(), 1);

std::random_device rd;
std::mt19937 g(rd());

std::shuffle(data.begin(), data.end(), g);

for (const auto n : data) {

stream << std::to_string(n) << " ";
}

return stream;
}

Generator.cpp

函數 ??generate?? 引用一個 ??std::stringstream?? 和一個整數來作為一個參數。根據整數 ??range?? 的值 ??n??,制作一個在 ??1?? 到 ??n?? 的范圍之中的整數向量,并隨后打亂。接下來打亂的向量值轉換成一個字符串,并推送到 ??stringstream?? 之中。該函數返回與作為參數傳遞相同的 ??stringstream?? 引用。

頂層的 CMakeLists.txt

頂層的 ??CMakeLists.txt?? 的是我們項目的入口點。在子目錄中可能有多個 ??CMakeLists.txt?? 文件(例如,與項目所相關聯的庫或其它可執行文件)。我們先一步一步地瀏覽頂層的 ??CMakeLists.txt??。

第一行告訴我們處理文件所需要的 CMake 的版本、項目名稱及其版本,以及預定的 C++ 標準。

cmake_minimum_required(VERSION 3.14)

project(CPP_Testing_Sample VERSION 1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

我們用下面一行告訴 CMake 去查看子目錄 ??Generator??。這個子目錄包括構建 ??Generator?? 庫的所有信息,并包含它自身的一個 ??CMakeLists.txt?? 。我們很快就會談到這個問題。

add_subdirectory(Generator)

現在,我們將涉及一個絕對特別的功能: ??CMake 模塊?? 。加載模塊可以擴展 CMake 功能。在我們的項目中,我們加載了 ??FetchContent?? 模塊,這能使我們能夠在 CMake 運行時下載外部的資源,在我們的示例中是 ??GoogleTest?? 。

include(FetchContent)

FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/bb9216085fbbf193408653ced9e73c61e7766e80.zip
)
FetchContent_MakeAvailable(googletest)

在接下來的部分中,我們會做一些我們通常在普通的 Makefile 中會做的事: 指定要構建的二進制文件、它們相關的源文件、應該鏈接的庫,以及編譯器可以找到頭文件的目錄。

add_executable(Producer Producer.cpp)

target_link_libraries(Producer PUBLIC Generator)

target_include_directories(Producer PUBLIC "${PROJECT_BINARY_DIR}")

通過下面的語句,我們使 CMake 來在構建文件夾中創建一個名稱為 ??compile_commands.json?? 的文件。這個文件會展示項目的每個文件的編譯器選項。在 VSCodium 中加載該文件,會告知 IntelliSense 功能在哪里查找頭文件(查看 ??文檔??)。

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

最后的部分為我們的項目定義一些測試。項目使用先前加載的 GoogleTest 框架。單元測試的整個話題將會劃歸到另外一篇文章。

enable_testing()

add_executable(unit_test unit_test.cpp)

target_link_libraries(unit_test gtest_main)

include(GoogleTest)

gtest_discover_tests(unit_test)

庫層次的 CMakeLists.txt

現在,我們來看看包含同名庫的子目錄 ??Generator?? 中的 ??CMakeLists.txt?? 文件。這個 ??CMakeLists.txt?? 文件的內容更簡短一些,除了單元測試相關的命令外,它僅包含 2 條語句。

add_library(Generator STATIC Generator.cpp Generator.h)
target_include_directories(Generator INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

我們使用 ??add_library(...)?? 來定義一個新的構建目標:靜態的 ??Generator?? 庫。我們使用語句 ??target_include_directories(...)?? 來把當前子目錄添加到其它構建目標的頭文件的搜索路徑之中。我們也具體指定這個屬性的范圍為類型 ??INTERFACE??:這意味著該屬性僅影響鏈接到這個庫的構建目標,而不是庫本身。

開始使用 VSCodium

通過使用 ??CMakeLists.txt?? 文件中的信息,像 VSCodium 一樣的 IDE 可以相應地配置構建系統。如果你還沒有使用 VSCodium 或 VS Code 的經驗,這個示例項目會是一個很好的起點。首先,轉到它們的 ??網站?? ,然后針對你的系統下載最新的安裝軟件包。打開 VSCodium 并導航到 “擴展Extensions” 標簽頁。

為了正確地構建、調試和測試項目,搜索下面的擴展并安裝它們:

Searching extensions

如果尚未完成,通過單擊起始頁的 “克隆 Git 存儲庫Clone Git Repository” 來克隆存儲庫。

Clone Git repository

或者手動輸入:

git clone https://github.com/hANSIc99/cpp_testing_sample.git

之后,通過輸入如下內容來簽出標簽 ??devops_1??:

git checkout tags/devops_1

或者,通過單擊 “main” 分支按鈕(紅色框),并從下拉菜單(黃色框)中選擇標簽。

Select devops_1 tag

在你打開 VSCodium 內部中的存儲庫的根文件夾后,CMake Tools 擴展會偵測 ??CMakeLists.txt?? 文件并立即掃描你的系統尋找合適的編譯器。你現在可以單擊屏幕的底部的 “構建Build” 按鈕(紅色框)來開始構建過程。你也可以通過單擊底部區域的按鈕(黃色框)標記來更改編譯器,它顯示當前活動的編譯器。

Build compiler

要開始調試 ??Producer?? 可執行文件,單擊調試器符號(黃色框)并從下拉菜單中選擇 “調試Debug Producer”(綠色框)。

Starting the debugger

如上所述,??Producer?? 可執行文件要求將元素的數量作為一個命令行的參數。命令行參數可以在 ??.vscode/launch.json?? 中具體指定。

Command-line arguments

好了,你現在能夠構建和調試項目了。

結束語

歸功于 CMake ,不管你正在運行哪種操作系統,上述步驟應該都能工作。特別是使用與 CMake 相關的擴展,VSCodium 變成了一個強大的 IDE 。我沒有提及 VSCodium 的 Git 集成,是因為你已經能夠在網絡上查找很多的資源。我希望你可以看到:提供一個適當的 CMake 配置文件可以使其他人更容易地構建、使用和貢獻于你的項目。在未來的文章中,我將介紹單元測試和 CMake 的測試實用程序 ??ctest?? 。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2025-07-11 07:49:07

2023-09-05 09:00:00

工具Python抄襲檢測系統

2025-04-01 09:31:34

PyTorch自動語音識別ASR系統

2025-05-06 08:23:56

Llama 4AutoGenAI智能體

2016-09-21 12:54:10

CAAS系統鏡像

2018-08-27 17:05:48

tensorflow神經網絡圖像處理

2014-02-26 10:14:51

OpenStack測試系統

2023-02-13 14:47:32

人工智能機器學習ChatGPT

2025-07-24 09:08:31

2009-04-28 09:44:31

jQueryAjaxphp

2021-08-27 12:16:34

fastjarJAR文件Java

2018-11-14 19:00:24

PythonRedis共享單車

2019-10-22 11:42:29

sshuttle虛擬專網Linux

2022-07-31 15:46:30

Web自動智能停車

2023-09-21 08:00:00

ChatGPT編程工具

2021-07-14 17:39:46

ReactRails API前端組件

2023-03-10 13:38:00

Python文檔掃描器

2018-05-25 08:44:22

樹莓派PythonMySQL

2019-05-14 12:30:07

PythonPygame游戲框架

2018-03-26 11:39:13

LinuxAnsible計算系統
點贊
收藏

51CTO技術棧公眾號

国产精品入口福利| 久久99精品久久久野外观看| 国产欧美日韩| 亚洲一卡二卡三卡四卡| 国产精品美女主播在线观看纯欲| 国产日韩精品中文字无码| 欧美一级淫片aaaaaa| 日本成人小视频| 日韩欧美成人精品| 成人xxxxx色| √天堂中文官网8在线| 秋霞国产精品| 久久久亚洲精品石原莉奈 | 九九热免费在线观看| 日韩一二三四| 成人直播在线观看| 亚洲美女视频在线观看| 国产精品国产亚洲伊人久久 | 成人免费网站入口| 国产精品久久久久久久免费 | 日韩精品一区二区三区| 成人97人人超碰人人99| 米奇精品一区二区三区在线观看| 欧美精品久久久久久久久25p| 免费在线超碰| 日韩精品一区第一页| 亚洲天堂色网站| 午夜肉伦伦影院| 你懂的好爽在线观看| 国产伦精一区二区三区| 欧美大尺度在线观看| 扒开jk护士狂揉免费| 欧美成人资源| 亚洲午夜一区二区| 一区不卡字幕| 97精品人妻一区二区三区| 成人毛片在线| 精品一区二区电影| 黄色av免费在线播放| 激情在线视频| 美女视频免费一区| 久久亚洲国产成人| 中文字幕av一区二区三区人妻少妇| 国产在线高清视频| 国产精品一区二区久久不卡| 国产精品久久久久久一区二区| 中文字幕亚洲欧美日韩| 精品成人18| 欧美丝袜第三区| 欧美精品成人一区二区在线观看| 精品一区二区三区人妻| 精品亚洲a∨一区二区三区18| 欧美性生交片4| 日本黄网站免费| av中文字幕一区二区三区| 精品一区二区免费在线观看| 欧美黑人巨大精品一区二区| 国产吞精囗交久久久| 欧美成人aaa| 亚洲一区二区3| 日韩视频 中文字幕| 欧美成人免费| 久久久高清一区二区三区| 久久久婷婷一区二区三区不卡| 成人黄色片在线观看| 欧美久久成人| 一本大道亚洲视频| 日韩成人av影院| 天然素人一区二区视频| 91福利小视频| 国产av麻豆mag剧集| 欧美猛烈性xbxbxbxb| bt7086福利一区国产| 成人夜晚看av| 国产视频1区2区| 中文字幕一区二区三三| 日韩精品在线视频美女| 国产精品无码午夜福利| 国产精品日韩精品中文字幕| 国产一区二区欧美日韩| 亚洲精品卡一卡二| 欧美日本久久| 欧美亚洲激情视频| 亚洲熟女www一区二区三区| 国产不卡av一区二区| 国产一区二区三区在线观看视频 | 日韩成人精品一区二区| 亚洲精品一线二线三线无人区| www.日本xxxx| 国产精品一区二区三区www| 色妞www精品视频| av中文字幕网址| 国产精品传媒| 日韩一区二区三区视频在线观看| 亚洲高清在线免费观看| 中文字幕人成乱码在线观看 | 亚洲人午夜色婷婷| 亚洲av熟女高潮一区二区| www.成人| 欧美年轻男男videosbes| 黑森林精品导航| 成人精品在线| 精品一区二区三区四区| 老熟妇高潮一区二区三区| 99视频精品| 国产做受69高潮| 免费又黄又爽又色的视频| 亚洲精品久久久| 久久久国产精品一区| 日韩一卡二卡在线观看| 爽成人777777婷婷| 亚洲色图综合网| 曰本女人与公拘交酡| 久久精品系列| 国产成+人+综合+亚洲欧洲| 丰满少妇乱子伦精品看片| 狠狠色狠狠色综合日日tαg| 欧美黄色成人网| 中文字幕乱码无码人妻系列蜜桃| 日韩av一级片| 国产欧美在线视频| 99精品在线视频观看| 国产精品亚洲一区二区三区妖精| 欧美一区少妇| 中文字幕在线观看日本| 亚洲三级免费观看| 大地资源网在线观看免费官网| 97超碰资源站在线观看| 亚洲综合免费观看高清完整版| www.欧美黄色| 国产精久久一区二区| 亚洲欧美日韩中文在线制服| 欧美性受xxxx黑人| 99久久婷婷这里只有精品| 久久在线精品视频| 中文字幕av无码一区二区三区| 91美女片黄在线观看| 日本在线视频不卡| 麻豆av在线免费看| 欧美主播一区二区三区| 在线视频日韩欧美| 精品久久97| 一区二区三区四区视频| 四虎成人永久免费视频| 男女视频一区二区| 日韩中文一区二区三区| av激情成人网| 亚洲无av在线中文字幕| 99成人精品视频| 国产亚洲短视频| 四虎免费在线观看视频| 成人av影院在线观看| 色综合欧美在线| 久久精品视频在线观看免费| 欧美超碰在线| 国产日韩欧美黄色| 老司机精品影院| 欧美一区二区性放荡片| 久久精品老司机| 六月丁香综合| 亚洲成人蜜桃| 九色porny丨首页入口在线| 欧美日韩精品欧美日韩精品一综合| 国产精品熟女一区二区不卡| 亚洲高清极品| 久久97精品久久久久久久不卡 | 欧美日本高清| 欧美大胆一级视频| 免费一级特黄3大片视频| 欧美aaa在线| 亚洲高清视频在线观看| 日韩在线电影| 亚洲免费高清视频| 四虎影院在线免费播放| 成人av电影在线| 亚洲午夜精品久久久久久人妖| 国产精品久一| 久久久久国产视频| 91高潮大合集爽到抽搐| 亚洲欧美色综合| 中文字幕乱视频| 老牛国产精品一区的观看方式| 99电影网电视剧在线观看| 国产精品186在线观看在线播放| 日韩经典一区二区三区| 久久久精品一区二区涩爱| www.色综合.com| 狠狠躁狠狠躁视频专区| 亚洲国产最新| 国产在线精品成人一区二区三区| 天使と恶魔の榨精在线播放| 欧美日韩国产片| 久久久久久蜜桃| 国产三级精品在线| 99精品视频免费版的特色功能| 日韩香蕉视频| 综合色婷婷一区二区亚洲欧美国产| 亚洲最新无码中文字幕久久| 亚洲黄色av女优在线观看| 久草视频手机在线观看| 91亚洲永久精品| 男女视频网站在线观看| 日韩精品一区二区三区免费观看| 99porn视频在线| 777午夜精品电影免费看| 日韩久久久精品| 无码人妻黑人中文字幕| 一区二区三区四区乱视频| 精品国产午夜福利在线观看| 国产日韩欧美高清免费| 久热这里只精品99re8久| 一个人www视频在线免费观看| 久久精品亚洲一区| 男生女生差差差的视频在线观看| 日韩一区二区电影网| 久草热在线观看| 五月激情六月综合| 亚洲中文字幕一区| 国产情侣久久| 男人c女人视频| 欧美hd在线| 欧美一区免费视频| 色综合久久中文| 国产成人精品久久二区二区91| 日本天码aⅴ片在线电影网站| 一区国产精品视频| 蝌蚪视频在线播放| 亚洲福利视频在线| 天天做天天爱夜夜爽| 久久久久国产精品麻豆| 丰满岳乱妇一区二区| 国产精品夜夜嗨| 97人人模人人爽人人澡| 久久99热99| 向日葵污视频在线观看| 天堂一区二区在线| 国产午夜伦鲁鲁| 日韩视频在线一区二区三区| 成人在线国产视频| 九色精品国产蝌蚪| 国产色综合天天综合网| 日本美女久久| 国产精品久久久久久久久免费| 欧亚av在线| 欧美野外猛男的大粗鳮| 一区二区三区短视频| 欧美亚洲另类激情另类| 亚洲人成午夜免电影费观看| 欧美中在线观看| 麻豆传媒在线观看| zzjj国产精品一区二区| 色婷婷中文字幕| 欧美日韩免费视频| 在线免费a视频| 亚洲大片在线观看| 色婷婷国产精品免| 国产精品福利一区二区三区| 亚洲熟女乱综合一区二区| 国产精品18久久久久久久久 | 久久久久久欧美精品色一二三四| 国产精品色呦| 麻豆av一区二区三区| 欧美日韩黑人| 国产高清精品一区二区| 成人免费一区| 成人在线精品视频| 在线一区二区三区视频| 国产精品网红直播| 少妇视频一区| 国产精品美女久久久久av超清| 日韩毛片免费视频一级特黄| 51国偷自产一区二区三区| 91tv亚洲精品香蕉国产一区| 国产一区二区在线播放| 亚洲精品18| 欧美理论一区二区| 欧美电影免费播放| 免费拍拍拍网站| 日韩国产欧美在线观看| 热久久久久久久久| 日韩av高清在线观看| 在线能看的av网站| 高清shemale亚洲人妖| www激情五月| 风间由美性色一区二区三区| 蜜臀av一区二区三区有限公司| 中文一区二区完整视频在线观看| 一二三不卡视频| 成人毛片老司机大片| 日本人69视频| 成人精品高清在线| 极品蜜桃臀肥臀-x88av| 亚洲专区一二三| 国产一级片免费视频| 欧美午夜女人视频在线| 亚洲特级黄色片| 亚洲第一福利视频| 色综合久久影院| 亚洲网站在线播放| 国内在线免费视频| 国产精品美女www| 噜噜噜狠狠夜夜躁精品仙踪林| 亚洲一区二区三区加勒比 | 不卡中文字幕av| 日本免费久久| 国产精品一区二区三区在线观| 国产精品亚洲一区二区在线观看| 国产在线精品日韩| 日本中文字幕在线一区| 久久精品人成| 中国精品18videos性欧美| 超碰97人人射妻| 国产91精品精华液一区二区三区| 无码人妻aⅴ一区二区三区69岛| 久久免费的精品国产v∧| 亚洲av成人片色在线观看高潮| 国产精品国产三级国产普通话99| 美女又爽又黄免费视频| 日韩精品一区二区三区视频播放| 91大神在线网站| 国产成人精品视| 奇米777国产一区国产二区| 国产a级黄色大片| 国内精品免费在线观看| 佐佐木明希电影| 99国产欧美另类久久久精品| 黄色a级片在线观看| 欧美日韩五月天| 精品国产免费无码久久久| 精品99一区二区| 操你啦视频在线| 国自在线精品视频| 日韩三级av高清片| 久久99热只有频精品91密拍| 欧美日本免费| 91亚洲一线产区二线产区| 亚洲日本在线看| 国产美女www爽爽爽视频| 色综合伊人色综合网| 女子免费在线观看视频www| 2018国产精品视频| 久久婷婷五月综合色丁香| 日本10禁啪啪无遮挡免费一区二区| 国产精品婷婷| 香蕉视频黄色在线观看| 欧美性xxxxxxx| 欧洲综合视频| 国产www精品| 成人久久综合| 中文字幕一区二区在线观看视频| 国产精品国产三级国产普通话三级| 又色又爽又黄无遮挡的免费视频| 中文字幕日韩有码| 不卡的av影片| 高清视频一区二区三区| 亚洲精品极品| 亚洲久久中文字幕| 中文字幕一区二区三区色视频| ,一级淫片a看免费| 久久九九全国免费精品观看| 伊人久久大香| 97av中文字幕| www.在线欧美| 波多野结衣家庭主妇| 日韩中文字幕视频| 哺乳一区二区三区中文视频| 久在线观看视频| 国产很黄免费观看久久| 久热这里只有精品在线| 亚洲精品成人av| 视频在线日韩| 麻豆成人小视频| 日本aⅴ免费视频一区二区三区| 九九热久久免费视频| 日韩一区二区三区在线视频| 三级中文字幕在线观看| 水蜜桃亚洲精品| 免费日韩精品中文字幕视频在线| 91人妻一区二区三区| 亚洲成人激情综合网| 国产视频三级在线观看播放| 97精品国产97久久久久久春色| 91精品国产一区二区在线观看| 一二三四中文字幕| 91热门视频在线观看| 一级特黄色大片| 97精品视频在线播放| 日韩电影一区| 国内精品免费视频| 欧美日韩在线不卡| 678在线观看视频| 国产精品久久久久久久久久直播 | 国内外成人免费在线视频| 一区二区三区高清在线| 黄网站在线观看| 99在线视频首页| 麻豆成人91精品二区三区| 免费看污片的网站| 欧美电影免费提供在线观看| 自拍偷自拍亚洲精品被多人伦好爽|