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

大型工程的管理,CMake快速入門

開發(fā) 開發(fā)工具
當(dāng)我們的工程有成千上萬(wàn)文件構(gòu)成時(shí),手動(dòng)寫Makefile文件將是噩夢(mèng)。幸好CMake幫我們解決了最為棘手的問(wèn)題。今天我們就介紹一下自動(dòng)生成Makefile文件的工具,CMake。

我們先從一個(gè)最簡(jiǎn)單的場(chǎng)景開始,這種場(chǎng)景就是只有一個(gè)源文件的場(chǎng)景。當(dāng)然,對(duì)于單文件的場(chǎng)景我們可以直接通過(guò)gcc進(jìn)行編譯,但是為了說(shuō)明CMake的用法,我們以此作為起點(diǎn)。后面我們會(huì)逐步介紹更加復(fù)雜的場(chǎng)景。目的很簡(jiǎn)單,主要是為了降低入門的門檻,然后讓大家像上臺(tái)階一樣,不知不覺的爬到泰山之巔。

單文件的軟件工程

我們可以先創(chuàng)建一個(gè)目錄,比如simple,然后在這個(gè)目錄中創(chuàng)建一個(gè)名稱為main.cpp的C++程序,程序代碼如下所示。

#include <iostream>
int main(int argc, char** argv)
{
    std::cout << "this is a simple example!" << "\n";
    return 0;
}

再創(chuàng)建一個(gè)名稱為CMakeLists.txt的文件,這個(gè)文件正是cmake使用的文件。文件的內(nèi)容如下,是不是很簡(jiǎn)單。

cmake_minimum_required(VERSION 3.16)

project(CMakeSunny
      VERSION 1.0
      DESCRIPTION "A CMake Tutorial"
      LANGUAGES CXX)

add_executable(cmlearn
                           main.cpp)

上面文件中cmake_minimum_required用于指定cmake的最低版本號(hào)。project用于名稱功能,其中包含工程名稱、版本信息和工程描述等信息。最后add_executable則用于指定編程后的可執(zhí)行文件名稱以及源代碼文件。

具備上述兩個(gè)文件后,在根目錄下面創(chuàng)建一個(gè)名稱為build的目錄,然后切換到目錄下面,執(zhí)行cmake就可以生成一個(gè)Makefile文件。然后執(zhí)行make命令就可以編譯出二進(jìn)制文件來(lái)。具體執(zhí)行的命令如下:

mkdir build
cd build
cmake ..
make

下圖展示了上述文件的關(guān)系,main.cpp和CMakeLists.txt是我們創(chuàng)建的。目錄build中的目錄和文件分別是通過(guò)cmake和make命令生成的。最終生成的二進(jìn)制文件也是在build目錄中,名稱為cmlearn,這個(gè)名稱是在CMakeLists.txt定義的。

多文件的軟件工程

更進(jìn)一步,如果我們的軟件工程通常包含不止一個(gè)文件,比如我們這里增加一個(gè)做加法的函數(shù),這個(gè)函數(shù)在一個(gè)獨(dú)立的文件中。此時(shí)工程中包含3個(gè)獨(dú)立的文件,分別為main.cpp、add.cpp和頭文件add.h。此時(shí)我們自己創(chuàng)建的文件目錄結(jié)構(gòu)如下圖所示。

接下來(lái)我們只需要做很簡(jiǎn)單的改動(dòng)就可以將新文件的內(nèi)容編譯進(jìn)來(lái)。如下代碼所示,我們?cè)赼dd_executable中添加add.cpp文件即可。

cmake_minimum_required(VERSION 3.16)
project(CMakeSunny
    VERSION 1.0
    DESCRIPTION "A CMake Tutorial"
    LANGUAGES CXX)

add_executable(add
    main.cpp
    add.cpp)

上述add.cpp文件的內(nèi)容如下所示,其功能很簡(jiǎn)單,就是實(shí)現(xiàn)一個(gè)加法功能。

int add(int a, int b)
{
    return a+b;
}

頭文件的實(shí)現(xiàn)更加簡(jiǎn)單,具體內(nèi)容如下所示。需要注意的是,我們這里僅僅是為了延時(shí)CMake的功能,很多產(chǎn)品級(jí)必須的代碼名沒有寫到這里。

int add(int a, int b);

為了驗(yàn)證實(shí)現(xiàn)的正確性,我們可以在main.cpp中做一些修改,引用在add.cpp中實(shí)現(xiàn)的函數(shù)。具體修改后的內(nèi)容如下所示。

#include <iostream>
#include "add.h"

int main(int argc, char** argv)
{
    int r = add(1, 3);
    std::cout << "this is a simple example!" << r << "\n";
    return 0;
}

完成上述修改后,大家可以切回到build目錄中,重新執(zhí)行cmake ..和make命令,可以看到生成了新的二進(jìn)制文件cmlearn。我們可以執(zhí)行一下這個(gè)程序,可以看到結(jié)果符合預(yù)期。

包含子目錄的軟件工程

實(shí)際的大型項(xiàng)目比上面介紹的還要復(fù)雜的多。比如上文我們提到實(shí)現(xiàn)了一個(gè)加法功能的add.cpp文件。比如我們又要實(shí)現(xiàn)減法、乘法和除法等功能,也都是在獨(dú)立的文件中實(shí)現(xiàn)。那么這些計(jì)算的實(shí)現(xiàn)最好放到一個(gè)目錄中,比如math目錄。在大型項(xiàng)目中經(jīng)常會(huì)這樣組織源代碼,一個(gè)功能模塊的代碼,或者詳細(xì)功能的代碼被組織在一個(gè)子目錄中。

這是源代碼會(huì)被組織成如下圖所示的結(jié)構(gòu),而且在子目錄math中也需要新建一個(gè)名稱為CMakeLists.txt文件。該文件的內(nèi)容可以非常簡(jiǎn)單,具體如下所示,是不是很簡(jiǎn)單!

add_library(math OBJECT sub.cpp
                                          add.cpp)

函數(shù)add_library用于創(chuàng)建一個(gè)庫(kù),這里的庫(kù)與Linux的動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的概念基本對(duì)應(yīng),但不完全一樣。本例是創(chuàng)建一個(gè)OBJECT類型的庫(kù),其實(shí)就是生成目標(biāo)文件。如前文所述,這個(gè)函數(shù)可以創(chuàng)建Linux的動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù),我們后面會(huì)詳細(xì)介紹一下這方面的內(nèi)容。

如下是該函數(shù)的幾種應(yīng)用場(chǎng)景,比如STATIC是靜態(tài)庫(kù),SHARED是動(dòng)態(tài)庫(kù),OBJECT則是我們當(dāng)前使用的目標(biāo)文件。另外還有MODULE、INTERFACE和IMPORTED等類型。

add_library(<name> [STATIC | SHARED | MODULE]
    [EXCLUDE_FROM_ALL]
    [<source>...])
add_library(<name> OBJECT [<source>...])
add_library(<name> INTERFACE)
add_library(<name> <type> IMPORTED [GLOBAL])

有了子目錄中的CMakeLists.txt還不夠,我們需要在根目錄的CMakeLists.txt添加一些內(nèi)容,建立根目錄與子目錄math的聯(lián)系。建立聯(lián)系很簡(jiǎn)單,我們只需要在根目錄的CMakeLists.txt中添加如下一行代碼即可。

add_subdirectory(math)

當(dāng)添加上述代碼后,我們?cè)赽uild目錄再次執(zhí)行cmake命令的時(shí)候可以觸發(fā)子目錄生成Makefile文件。而執(zhí)行make命令進(jìn)行編譯的時(shí)候,可以觸發(fā)子目錄的編譯,生成目標(biāo)文件。

target_link_libraries(cmlearn PUBLIC math)

上述函數(shù)實(shí)現(xiàn)了鏈接的功能,將子模塊math鏈接到了主模塊main上,最終會(huì)生成一個(gè)可執(zhí)行程序。但是我們?cè)谠创a層面還沒有任何更該,主程序也沒有調(diào)用add.cpp和sub.cpp中的任何函數(shù),所以實(shí)際上也不存在鏈接的過(guò)程。

如果讓主程序調(diào)用math中的函數(shù),首先需要在主程序中包含頭文件。在CMakeLists.txt中需要添加如下代碼來(lái)告訴編譯器頭文件的位置。否則在編譯的時(shí)候會(huì)有找不到頭文件的錯(cuò)誤提示。

target_include_directories(cmlearn PUBLIC
    "${PROJECT_SOURCE_DIR}/math"
)

完成CMakeLists.txt的修改后,我們最后需要修改一下主程序。修改主程序的目的主要是讓主程序調(diào)用math中實(shí)現(xiàn)的函數(shù)。修改后的主程序如下所示,在主程序中調(diào)用了add和sub兩個(gè)函數(shù),并且在一開始包含了add.h和sub.h兩個(gè)文件。

#include <iostream>
#include "add.h"
#include "sub.h"

int main(int argc, char** argv)
{
    int sum = add(1, 3);
    int diff = sub(3, 1);
    std::cout << "The sum of 1 and 3 is " << sum << std::endl;
    std::cout << "The diff of 3 and 1 is " << diff << std::endl;
    return 0;
}

完成上述修改后,我們可以在build目錄執(zhí)行“cmake ..”命令,然后執(zhí)行make命令編譯程序,最后可以得到一個(gè)可執(zhí)行程序。

通過(guò)上面的舉例,我們對(duì)通過(guò)CMake來(lái)維護(hù)一個(gè)大型的軟件項(xiàng)目有了一個(gè)初步的了解。實(shí)際上CMake實(shí)現(xiàn)的功能還要豐富的多, 我們?cè)诤罄m(xù)會(huì)詳細(xì)介紹。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2023-10-08 08:28:10

Spring事務(wù)管理

2020-07-21 08:20:23

系統(tǒng)架構(gòu)編輯器

2015-10-29 15:36:19

Redis入門

2017-06-14 17:50:44

Kotlin寫法Java

2021-03-19 12:26:00

物聯(lián)網(wǎng)IoT大數(shù)據(jù)

2011-11-29 12:27:54

2009-09-24 15:27:41

Hibernate查詢

2010-06-24 13:35:53

GRE協(xié)議

2021-05-07 08:02:53

Sentinel 流量服務(wù)

2011-03-08 16:50:35

2025-05-07 00:10:00

2023-12-19 09:36:35

PostgreSQL數(shù)據(jù)庫(kù)開源

2011-05-16 09:22:28

SQL語(yǔ)言

2025-02-28 08:42:53

SpringNetflixHystrix

2021-01-15 09:30:02

Tomcat ApacheJavaServer

2019-11-13 15:44:17

Kafka架構(gòu)數(shù)據(jù)

2009-11-18 14:53:59

PHP Session

2011-05-16 09:15:22

SQL語(yǔ)言

2020-11-25 19:05:50

云計(jì)算SaaS公有云

2011-06-28 17:52:49

SEO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

性色av一区二区三区在线观看| 日本女优爱爱视频| 99免费精品视频| 草逼视频免费看| 亚洲自拍高清视频网站| 欧美一级久久| 日韩污视频在线观看| 国产成人精品午夜| 亚洲国产你懂的| 欧美jizz19性欧美| 国产成人精品电影久久久| 国产999精品久久久久久| 嫩草在线视频| 制服丝袜在线播放| 秋霞影院一区二区| 国外色69视频在线观看| 久久精品色妇熟妇丰满人妻| 日本成人精品| 在线视频欧美精品| 久久亚洲欧美日韩精品专区| 韩国三级hd中文字幕有哪些| 自拍偷拍欧美视频| 亚洲精品成人天堂一二三| 免费中文日韩| 亚洲av无码一区二区三区性色| 日韩国产在线观看一区| 日韩久久免费视频| 日韩欧美在线视频观看| 国内精品久久久久| 三区四区在线观看| 日韩高清成人在线| 精品乱码亚洲一区二区不卡| mm131亚洲精品| 欧美成人黑人| 91视频一区二区三区| 91欧美激情另类亚洲| 久久亚洲精品石原莉奈 | 国产日韩av一区| 国产精品成人一区二区三区| 国产精品高潮呻吟AV无码| 亚洲欧美aaa| 性久久久久久久久久久久久久| 久草在线资源福利站| 亚洲精品视频在线| 偷拍盗摄高潮叫床对白清晰| 成人影视在线播放| 久久久精品综合| 欧美大陆一区二区| 亚洲三区在线观看无套内射| 成人18视频日本| 99国产高清| av官网在线观看| 七七婷婷婷婷精品国产| 日本一区二区在线播放| 日本少妇性高潮| 最新日韩av| 国产69精品久久久久9| 天天舔天天操天天干| 精品国产一区二区三区香蕉沈先生 | 久久99最新地址| 国产精品日韩精品| 亚洲自拍偷拍另类| 免费在线看成人av| 国产在线播放不卡| 久久无码人妻精品一区二区三区| 精品一区二区三区四区五区| 久久免费资源| 亚洲国产精品二十页| 成人国产精品色哟哟| 中文字幕人妻互换av久久| 美女视频黄久久| 成人激情黄色网| 99在线无码精品入口| 成人黄色在线看| 欧美成人dvd在线视频| 毛片网站在线| 中文字幕中文字幕在线一区| 国产亚洲欧美另类一区二区三区| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 北岛玲一区二区三区四区| 国产一区二区自拍| 九色视频在线观看免费播放| 中文字幕日韩欧美一区二区三区| 免费观看国产视频在线| 三级av在线| 国产女人18水真多18精品一级做 | 久久精品亚洲一区| 黄色一级片在线| 狠狠色狠狠色综合日日tαg| 欧美一区二区.| 这里只有精品999| 国产激情视频一区二区在线观看| 97视频在线观看免费| 国产黄色免费观看| 久久国产尿小便嘘嘘| 亚洲**2019国产| 亚洲大片免费观看| 国内久久精品视频| 久久爱av电影| 国产淫片在线观看| 欧美日韩中文字幕在线| 97超碰成人在线| 欧美五码在线| 欧美电影免费观看高清| 精品国产免费视频| 精品黑人一区二区三区观看时间| 日韩av密桃| 久久久久久久香蕉网| 日韩不卡高清视频| 国产成人av电影在线| 久久久久免费网| caoporn97在线视频| 久久久久久电影| 四虎4hu永久免费入口| 国产精品扒开腿做爽爽爽视频软件| 91精品国产综合久久福利| 三级电影在线看| 欧美国产高潮xxxx1819| 国产精品白丝jk喷水视频一区| 国产成人免费看一级大黄| 久久精品人人做| 久久久久久久久久伊人| 99riav视频一区二区| 亚洲精品www| 国产伦精品一区二区三区精品| 国产一区二区观看| 久久久噜噜噜久久| 国产成a人亚洲精v品无码 | 色噜噜日韩精品欧美一区二区| 午夜天堂精品久久久久| 91精品久久久久久久久久另类| 三级在线播放| 精品国产鲁一鲁一区二区张丽| 久久黄色一级视频| 日韩在线二区| 国产精品久久久久久久久久久久久久| 无码国产精品一区二区色情男同| 亚洲一区二区三区视频在线播放| 亚洲免费黄色网| 欧美精品系列| 国产成人涩涩涩视频在线观看| 手机亚洲第一页| 精品动漫一区二区三区| 老司机午夜免费福利| 欧美日本中文| 99久久精品无码一区二区毛片| 免费av在线| 欧美精品粉嫩高潮一区二区| 永久免费观看片现看| 日本三级亚洲精品| 日韩激情视频| 成人黄色毛片| 日韩在线免费观看视频| 中文字幕网址在线| 国产精品久久久久婷婷二区次| 亚洲精品高清无码视频| 精品亚洲成人| 成人高h视频在线| 黄色动漫在线| 日韩精品一区在线观看| 国产亚洲欧美精品久久久www| 激情欧美一区二区三区在线观看| 中文字幕在线亚洲三区| 国产视频网站一区二区三区| 欧美成人在线网站| 成人免费视频网| 神马午夜电影一区二区三区在线观看| 亚洲一区二区av在线| 中文字幕18页| 欧美美女黄色| 欧美性受xxxx白人性爽| 九色视频在线播放| 欧美精品亚洲一区二区在线播放| 免费在线观看一级片| 久久精品30| 日本一区视频在线观看| 日韩五码电影| 欧美精品激情在线| 日本人妖在线| 欧美精品丝袜中出| 久久综合亚洲色hezyo国产| av综合在线播放| 黄色av免费在线播放| 欧美裸体在线版观看完整版| 国产主播精品在线| ririsao久久精品一区| 亚洲欧洲日本专区| 免费在线看黄网址| 91在线高清观看| 黄色一级片免费的| 亚洲欧洲一区| 亚洲成人第一| 超碰97成人| 国产精品久久久久aaaa九色| caoporm免费视频在线| 日韩精品中文字幕在线播放| 一本色道久久综合亚洲| 午夜精品久久久| 欧美aaa级片| 国产东北露脸精品视频| 欧美在线观看视频网站| 欧美在线看片| 日韩和欧美的一区二区| 一区二区三区欧洲区| 久久久91精品| 黄色福利在线观看| 欧美色区777第一页| 国产午夜福利精品| 中文字幕人成不卡一区| 少妇大叫太粗太大爽一区二区| 激情综合色播五月| 日本a级片免费观看| 91精品国产乱码久久久久久久| 久久国产精品精品国产色婷婷| 综合欧美精品| 国产精品极品在线| 狠狠躁少妇一区二区三区| 久久福利视频导航| 国自产拍在线网站网址视频| 欧美三级在线| 国产成人综合亚洲| 7777kkk亚洲综合欧美网站| 久久精品99久久久香蕉| 国产精品无码2021在线观看| 亚洲成人激情在线观看| 国产美女明星三级做爰| 欧美亚洲国产一区二区三区| 中文字幕日韩一级| 亚洲国产精品视频| 69xx绿帽三人行| 国产精品电影院| 午夜影院黄色片| 国产日韩精品视频一区| 性欧美成人播放77777| 成人小视频在线| 亚洲三级在线视频| 国产又黄又大久久| 手机免费av片| 久久国产婷婷国产香蕉| 色婷婷成人在线| 日本中文字幕一区| 玩弄japan白嫩少妇hd| 亚洲自拍另类| 国产三区在线视频| 欧美精品momsxxx| 精品一区久久久| 久久97久久97精品免视看秋霞| 国产精品久久久久久久小唯西川| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 99热这里只有精品8| 少妇人妻大乳在线视频| 伊人久久久大香线蕉综合直播| 国产小视频免费| 黄色亚洲精品| 精品国产一二三四区| 国产精品日韩欧美一区| 99热成人精品热久久66| 另类天堂av| 四季av一区二区| 免费精品99久久国产综合精品| 亚洲国产高清av| 欧美在线观看天堂一区二区三区| 91xxx视频| 欧美三级第一页| 日韩国产一级片| 亚洲综合电影一区二区三区| 亚洲爆乳无码专区| 日本午夜一本久久久综合| 玖玖爱视频在线| 国产91精品露脸国语对白| 稀缺呦国内精品呦| 久久亚洲捆绑美女| 欧美福利第一页| 中文字幕一区二| 欧美性bbwbbwbbwhd| 免费毛片b在线观看| 日韩免费精品视频| 日韩免费在线电影| 国产精品一码二码三码在线| 尤物tv在线精品| 国产精品美女黄网| 免费看久久久| 婷婷久久伊人| 国产一区二区三区自拍| 免费欧美一级视频| 奇米精品一区二区三区四区| 亚洲天堂一区二区在线观看| 成人污污视频在线观看| 乐播av一区二区三区| 亚洲精品自拍动漫在线| 国产三级av片| 欧美日本在线视频| 色婷婷综合视频| 中文字幕亚洲一区二区三区五十路 | 欧美色男人天堂| 国产小视频一区| 亚洲天堂av女优| 视频在线这里都是精品| 国产成人激情视频| 日韩亚洲精品在线观看| 日本精品国语自产拍在线观看| 午夜亚洲福利| 国产性生交xxxxx免费| 丰满亚洲少妇av| 妖精视频在线观看免费| 欧美日韩国产精品一区| 久久久一二三区| 欧美影院午夜播放| 人人妻人人澡人人爽人人欧美一区 | 中文字幕1区2区| 国产清纯白嫩初高生在线观看91 | 白白色免费视频| 亚洲资源在线观看| 免费在线观看国产精品| 欧美日韩国产在线看| 99国产精品久久久久久久成人| 亚洲视频在线视频| 2001个疯子在线观看| 成人免费淫片aa视频免费| 国产免费久久| 黄色国产一级视频| 国产成人在线视频免费播放| 韩国三级hd中文字幕| 午夜久久久久久| 不卡视频免费在线观看| 久久天堂av综合合色| 91精品影视| 精品视频一区二区| 欧美三级在线| 亚洲天堂小视频| 亚洲视频中文字幕| 亚洲视频久久久| 伊人伊人伊人久久| 精品自拍一区| 国产玖玖精品视频| 性猛交xxxx乱大交孕妇印度| 久久精品在这里| 国产91精品一区| 欧美精品一区男女天堂| 羞羞视频在线免费国产| 91视频国产高清| 围产精品久久久久久久| 欧美一级视频在线| 国产精品超碰97尤物18| 一级黄色大毛片| 视频在线观看99| 国产成人亚洲一区二区三区| 亚洲mv在线看| 美女视频网站黄色亚洲| 永久av免费网站| 欧美久久高跟鞋激| 黄网站免费在线播放| 91九色国产视频| 一本一本久久a久久综合精品| 中文字幕国产高清| 亚洲欧美乱综合| 亚洲乱码国产乱码精品精软件| 久久成人18免费网站| 美国十次综合久久| 欧美日韩视频免费| www.欧美.com| 日韩色图在线观看| 亚洲最新av在线| 成人午夜精品| 一区二区三区四区久久| 国产精品亚洲视频| 日韩久久精品视频| 亚洲欧美另类人妖| 国产极品嫩模在线观看91精品| 99精品视频网站| 成人午夜视频免费看| 亚洲欧美综合自拍| 日韩中文字幕在线看| 中文字幕亚洲在线观看| 大j8黑人w巨大888a片| 亚洲国产高清不卡| 99久久久国产精品无码网爆| 国内免费久久久久久久久久久| 妖精视频一区二区三区免费观看| 午夜精品在线免费观看| 亚洲嫩草精品久久| 日韩一级片免费在线观看| 日韩av免费在线播放| 亚洲综合专区| 日韩av一二区| 欧美高清你懂得| av最新在线| 亚洲日本欧美在线| 国产ts人妖一区二区| 日韩黄色片网站| 大胆人体色综合| 禁断一区二区三区在线| 日本泡妞xxxx免费视频软件| 一本大道久久a久久综合| a级在线观看| 日本一区二区三区在线视频| 国产精品影视在线观看| 久久精品99北条麻妃| 欧美精品videosex性欧美| 日韩欧美综合|