gcc、make梢什、cmake奠蹬、qmake、make install這么多的make都干了什么

cmake是一種跨平臺(tái)的編譯工具嗡午,比make更為高級(jí)囤躁,使用起來要方便的多。cmake主要是編寫了cmakelists.txt文件,然后用cmake命令將cmakelists.txt文件轉(zhuǎn)化成make所需要的makefile文件狸演,最后用make命令編譯源碼生成可執(zhí)行程序或者共享庫(so(shared object))言蛇。它的作用和qt的qmake是相似的。

可以如下圖理解:

configure(配置編譯環(huán)境)

cmake=qmake(生成makefile)

make(從makefile中讀取指令宵距,然后編譯)

make install(從makefile中讀取指令腊尚,安裝程序)



那gcc/g++在這個(gè)過程中干了什么呢

我們知道編譯和鏈接階段是靠g++和gcc編輯器來完成,但是如果編譯和鏈接的階段如果源文件太多满哪,一個(gè)一個(gè)編譯時(shí)就會(huì)特別麻煩婿斥,于是人們想到,為什么不設(shè)計(jì)一種類似批處理的程序哨鸭,來批處理編譯源文件呢民宿,于是就有了make工具,它是一個(gè)自動(dòng)化編譯工具像鸡,你可以使用一條命令實(shí)現(xiàn)完全編譯活鹰。但是你需要編寫一個(gè)規(guī)則文件,make依據(jù)它來批處理編譯坟桅,這個(gè)文件就是makefile华望。

---------------------

///////////////////////////////////////////////詳細(xì)過程///////////////////////////////////////////////////////////////////


1.gcc是GNU Compiler Collection(就是GNU編譯器套件)蕊蝗,也可以簡單認(rèn)為是編譯器仅乓,它可以編譯很多種編程語言(括C、C++蓬戚、Objective-C夸楣、Fortran、Java等等)子漩。

2.當(dāng)你的程序只有一個(gè)源文件時(shí)豫喧,直接就可以用gcc命令編譯它。

3.但是當(dāng)你的程序包含很多個(gè)源文件時(shí)幢泼,用gcc命令逐個(gè)去編譯時(shí)紧显,你就很容易混亂而且工作量大

4.所以出現(xiàn)了make工具

make工具可以看成是一個(gè)智能的批處理工具,它本身并沒有編譯和鏈接的功能缕棵,而是用類似于批處理的方式—通過調(diào)用makefile文件中用戶指定的命令來進(jìn)行編譯和鏈接的孵班。

5.makefile是什么?簡單的說就像一首歌的樂譜招驴,make工具就像指揮家篙程,指揮家根據(jù)樂譜指揮整個(gè)樂團(tuán)怎么樣演奏,make工具就根據(jù)makefile中的命令進(jìn)行編譯和鏈接的别厘。

6.makefile命令中就包含了調(diào)用gcc(也可以是別的編譯器)去編譯某個(gè)源文件的命令虱饿。

7.makefile在一些簡單的工程完全可以人工手下,但是當(dāng)工程非常大的時(shí)候,手寫makefile也是非常麻煩的氮发,如果換了個(gè)平臺(tái)makefile又要重新修改渴肉。

8.這時(shí)候就出現(xiàn)了Cmake這個(gè)工具,cmake就可以更加簡單的生成makefile文件給上面那個(gè)make用折柠。當(dāng)然cmake還有其他功能宾娜,就是可以跨平臺(tái)生成對(duì)應(yīng)平臺(tái)能用的makefile,你不用再自己去修改了扇售。

9.可是cmake根據(jù)什么生成makefile呢前塔?它又要根據(jù)一個(gè)叫CMakeLists.txt文件(學(xué)名:組態(tài)檔)去生成makefile。

10.到最后CMakeLists.txt文件誰寫俺斜华弓?親,是你自己手寫的困乒。

11.當(dāng)然如果你用IDE寂屏,類似VS這些一般它都能幫你弄好了,你只需要按一下那個(gè)三角形

12.cmake是make maker娜搂,生成各種可以直接控制編譯過程的控制器的配置文件迁霎,比如makefile、各種IDE的配置文件百宇。

13.make是一個(gè)簡單的通過文件時(shí)間戳控制自動(dòng)過程考廉、處理依賴關(guān)系的軟件,這個(gè)自動(dòng)過程可以是編譯一個(gè)項(xiàng)目携御。

/////////////////////////linux平臺(tái)下的編譯流程////////////////////

  文本程序到可執(zhí)行文件生成無論在什么平臺(tái)大致分為以下幾個(gè)部分:?

  1.用編輯器編寫源代碼昌粤,如.c文件。?

  2.用編譯器編譯代碼生成目標(biāo)文件啄刹,如.o涮坐。?

  3.用鏈接器連接目標(biāo)代碼生成可執(zhí)行文件,如.exe誓军。?

  Linux平臺(tái)下袱讹,.o文件一般是通過編譯的但還未鏈接的目標(biāo)文件,.out文件一般都是經(jīng)過相應(yīng)的鏈接產(chǎn)生的可執(zhí)行文件(linux下)昵时。當(dāng)然這是一般情況下人們這么設(shè)置捷雕,而真正的,在linux中 .o通常保存的是可執(zhí)行代碼 债查,至于可執(zhí)行文件則沒有規(guī)定擴(kuò)展名非区,用的是文件屬性位來決定的是否可執(zhí)行。在chmod中設(shè)置盹廷。?

  我們知道編譯和鏈接階段是靠g++和gcc編輯器來完成征绸,這兩個(gè)編譯階段是相同的,但是鏈接階段g++默認(rèn)鏈接c++庫,所以一般情況下用gcc編譯c文件管怠,而g++編譯cpp文件淆衷。當(dāng)然g++也可以編譯c文件,而gcc編譯cpp文件則需要在后面加上參數(shù)-lstdc++渤弛,作用就是鏈接c++庫祝拯。?

  但是如果編譯和鏈接的階段如果源文件太多,一個(gè)一個(gè)編譯時(shí)就會(huì)特別麻煩她肯,于是人們想到佳头,為什么不設(shè)計(jì)一種類似批處理的程序,來批處理編譯源文件呢晴氨,于是就有了make工具康嘉,它是一個(gè)自動(dòng)化編譯工具,你可以使用一條命令實(shí)現(xiàn)完全編譯籽前。但是你需要編寫一個(gè)規(guī)則文件亭珍,make依據(jù)它來批處理編譯,這個(gè)文件就是makefile枝哄,所以編寫makefile文件也是一個(gè)程序員所必備的技能肄梨。?

  對(duì)于一個(gè)大工程,編寫makefile實(shí)在是件復(fù)雜的事挠锥,于是人們又想众羡,為什么不設(shè)計(jì)一個(gè)工具,讀入所有源文件之后瘪贱,自動(dòng)生成makefile呢纱控,于是就出現(xiàn)了cmake工具辆毡,它能夠輸出各種各樣的makefile或者project文件,從而幫助程序員減輕負(fù)擔(dān)菜秦。但是隨之而來也就是編寫cmakelist文件,它是cmake所依據(jù)的規(guī)則舶掖。所以在編程的世界里沒有捷徑可走球昨,還是要腳踏實(shí)地的。?

  原文件—cmakelist —cmake —makefile —make —生成可執(zhí)行文件(make中則包含了多條鏈接以及gcc/g++編譯語句)眨攘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末主慰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲫售,更是在濱河造成了極大的恐慌共螺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件情竹,死亡現(xiàn)場離奇詭異藐不,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門雏蛮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涎嚼,“玉大人,你說我怎么就攤上這事挑秉》ㄌ荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵犀概,是天一觀的道長立哑。 經(jīng)常有香客問我,道長姻灶,這世上最難降的妖魔是什么刁憋? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮木蹬,結(jié)果婚禮上至耻,老公的妹妹穿的比我還像新娘。我一直安慰自己镊叁,他們只是感情好尘颓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晦譬,像睡著了一般疤苹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敛腌,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天卧土,我揣著相機(jī)與錄音,去河邊找鬼像樊。 笑死尤莺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的生棍。 我是一名探鬼主播颤霎,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涂滴!你這毒婦竟也來了友酱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤柔纵,失蹤者是張志新(化名)和其女友劉穎缔杉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搁料,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡或详,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年进苍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸭叙。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觉啊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沈贝,到底是詐尸還是另有隱情杠人,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布宋下,位于F島的核電站嗡善,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏学歧。R本人自食惡果不足惜罩引,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枝笨。 院中可真熱鬧袁铐,春花似錦、人聲如沸横浑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徙融。三九已至洒缀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欺冀,已是汗流浹背树绩。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隐轩,地道東北人饺饭。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像龙助,于是被迫代替她去往敵國和親砰奕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛛芥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 題記 請(qǐng)?jiān)徫也徽f一聲再會(huì)仅淑,而在称勋,最深最深的角落里,試著將你藏起涯竟,藏到任何人赡鲜、任何歲月空厌,也無法觸及的距離 。 ——...
    愛讀書的靈魂畫家閱讀 497評(píng)論 4 8
  • 3:50 起床 4:00 瑜伽 十冥想 4:30 洗漱 (眼霜頸操) 5:00 走橋 6:...
    楊培雯閱讀 239評(píng)論 0 0
  • 什么是“林下”?林下是一次一次的相聚揩瞪,林下是那一個(gè)一個(gè)平常日子里的小確幸赋朦。林下生活美學(xué)想要做的,就是帶著我們的心靈...
    Holly兔小妖閱讀 715評(píng)論 0 2