Linux 自動化構(gòu)建工具 make/Makefile

鏡像下載、域名解析户辞、時間同步請點擊 阿里云開源鏡像站

VS中有一鍵編譯+自動運行驰徊,Linux也給我們提供了對應(yīng)的編譯方式笤闯,雖然不及VS那么便捷,但是相比于手動輸入 gcc -o add add.c 棍厂,我們一句make就可以搞定

Makefile是一個文件颗味,能夠存放上述 gcc -o add add.c 這種編譯指令

make是一個命令工具,能夠解釋Makefile中的指令

要如何編譯.c文件牺弹,關(guān)鍵就在于Makefile是怎么寫的浦马,下面我們主要介紹這兩者的使用

一、 單個文件的編譯

假設(shè)我們要編譯這么一個test.c文件张漂,我們希望編譯生成一個名為test的可執(zhí)行文件

file

我們在test.c所在目錄下創(chuàng)建一個Makefile文件晶默,這里有兩種編譯寫法

1、寫法一:逐個生成.i航攒、.s磺陡、.o文件,最后再生成 test執(zhí)行文件

先一步步向下分析,需要什么依賴文件币他,然后再一步步生成

file

編寫好以后坞靶,我們只需要在命令行輸入make,系統(tǒng)就會幫我們自動編譯了蝴悉,同時會生成每一步產(chǎn)生的文件按

file

2彰阴、 寫法二:一步到位,直接通過 test.c 生成 test 執(zhí)行文件(推薦)

Makefile中要寫的內(nèi)容如下

file

第一行:確定好依賴文件和目標(biāo)文件拍冠。也就是要用依賴文件來生成目標(biāo)文件

第二行:編譯指令尿这。

            $@ 指向第一行的目標(biāo)文件,表示目標(biāo)文件test

            $^ 指向第一行的依賴文件庆杜,表示依賴文件test.c

            -std 表示采用的C++標(biāo)準(zhǔn)

接下來我們只需要在命令行輸入make射众,系統(tǒng)就會幫我們編譯了,編譯成功以后晃财,當(dāng)前目錄下就會多出一個test 執(zhí)行文件

file
file

3责球、 Makefile自動清理

我們每次開始編譯之前,我們最好先清理一下之前生成的執(zhí)行文件拓劝,手動輸入 rm test 有點太麻煩了,Makefile只要寫入下面的內(nèi)容嘉裤,就會自動幫我們清理了

file

如果我們還希望移除生成的.o 郑临、.s、.i文件屑宠,那么第6行只要換成

rm -f test test.o test.s test.i

一般我們make的時候厢洞,系統(tǒng)會自動調(diào)用,當(dāng)然也可以手動調(diào)用典奉,如

file
file

我們會發(fā)現(xiàn)之前的test執(zhí)行文件不見了

二躺翻、多個文件的編譯(同一目錄下)

現(xiàn)在我們有三個文件,分別是test.c卫玖、sub.c公你、sub.h,而且我們要在test.c中調(diào)用sub.h中的函數(shù)

file

Makefile中的內(nèi)容如下:

file

test執(zhí)行文件 要依賴 多個文件生成的 .o文件假瞬,現(xiàn)在沒有 .o文件陕靠,所以需要重新生成 .o文件

當(dāng)前路徑下有多個.c文件,我們逐個去寫的話脱茉,就是

test.o:test.c
    gcc -c $@ $^
sub.o:sub.c
    gcc -c $@ $^

但是這樣寫太復(fù)雜了剪芥,我們可以選擇下面這種寫法

%.o: %.c
    gcc -c $<
  • %.o:表示目標(biāo)文件是 .o文件

  • %.c:表示依賴文件是當(dāng)前路徑下的 .c文件,可以看作是一個集合中放著 test.c sub.c

  • $< : 展開%.c 琴许,逐個生成對應(yīng)的 .o文件税肪,比如test.c就會生成對應(yīng)的test.o、sub.c就會生成對應(yīng)的

      sub.o
    

現(xiàn)在我們來運行一下

file
file

三、多個文件的編譯(不同目錄下)

現(xiàn)在我們有三個文件益兄,test.c锻梳、sub.h、sub.c偏塞,但是其中sub.h唱蒸、sub.c在其目錄func_dir 下

file
file

Makefile的內(nèi)容如下:

file

現(xiàn)在我們來運行一下試試

file
file

四、一次生成多個運行文件

1灸叼、常規(guī)寫法嘗試及其不可行的原因

=========================常規(guī)寫法嘗試=========================

上面的都是一個main函數(shù)文件 + 一堆函數(shù)文件的編譯神汹,但是有的時候,比如不同進程間通信時古今,我們可能需要一次生成兩個運行文件屁魏,如果我們按照常規(guī)的思路來寫,會怎么樣捉腥?

file
file

測試結(jié)果如下氓拼,我們發(fā)現(xiàn)只生成了一個運行文件,很顯然無法按照常規(guī)的寫法來寫

file

=========================原因分析=========================

Makefile自動構(gòu)建結(jié)束會生成運行文件抵碟,默認只生成最開始的一個桃漾,我們寫的時候,server的生成放在client的前面拟逮,server就是最開始的哪一個撬统,所以Makefile就只生成了 server

2、改進

Makefile既然生成server以后敦迄,就不會繼續(xù)生成下一個運行文件恋追,那么我們就要在這之前就告訴Makefile,我希望生成兩個運行文件(因為Makefile是自頂向下運行的罚屋,不會上來就去執(zhí)行g(shù)cc指令)

file

然后我們再來看一下測試結(jié)果苦囱,現(xiàn)在就能一次生成兩個運行文件了

file

本文轉(zhuǎn)自:https://blog.csdn.net/challenglistic/article/details/124249349

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脾猛,隨后出現(xiàn)的幾起案子撕彤,更是在濱河造成了極大的恐慌,老刑警劉巖尖滚,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喉刘,死亡現(xiàn)場離奇詭異,居然都是意外死亡漆弄,警方通過查閱死者的電腦和手機睦裳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撼唾,“玉大人廉邑,你說我怎么就攤上這事。” “怎么了蛛蒙?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵糙箍,是天一觀的道長。 經(jīng)常有香客問我牵祟,道長深夯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任诺苹,我火速辦了婚禮咕晋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘收奔。我一直安慰自己掌呜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布坪哄。 她就那樣靜靜地躺著质蕉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翩肌。 梳的紋絲不亂的頭發(fā)上模暗,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音念祭,去河邊找鬼汰蓉。 笑死,一個胖子當(dāng)著我的面吹牛棒卷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祝钢,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼比规,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拦英?” 一聲冷哼從身側(cè)響起蜒什,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疤估,沒想到半個月后灾常,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡铃拇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年钞瀑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慷荔。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡雕什,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贷岸,我是刑警寧澤壹士,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站偿警,受9級特大地震影響躏救,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜螟蒸,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一盒使、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尿庐,春花似錦忠怖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至皮假,卻和暖如春鞋拟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惹资。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工贺纲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褪测。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓猴誊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侮措。 傳聞我的和親對象是個殘疾皇子懈叹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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