輕松玩轉(zhuǎn)Makefile | 基礎(chǔ)用法

前言

本文通過幾個簡單的示例宿刮,可以快速了解Makefile的基本使用方法互站,適用于編譯我們平時練習(xí)所編寫的小量代碼。

1. make命令

Makefile文件內(nèi)容: all為<font color='green'>目標(biāo)</font>僵缺,這里沒有<font color='green'>依賴</font>的文件胡桃,這條<font color='green'>命令</font>是打印(echo)出“Hello Makefile”這行文字

all: 
    echo "Hello Makefile"

運行make后,終端打印的內(nèi)容

$ make
echo "Hello Makefile"
Hello Makefile

可以看到磕潮,Makefile的命令也打印在了終端翠胰,要想不輸出命令的內(nèi)容,可以在命令前面加上@

make可以指定要生成的目標(biāo)自脯,如果不指定之景,則默認第一個目標(biāo),我們將Makefile文件內(nèi)容修改一下

all: 
    @echo "Hello Makefile"
test: 
    @echo "Hello Test"

運行不同的命令膏潮,可以看到不同的打印信息

$ make
Hello Makefile

$ make all
Hello Makefile

$ make test
Hello Test

2. 生成文件

假設(shè)現(xiàn)在有兩個文件fun.c和main.c锻狗,需要利用Makefile生成一個可執(zhí)行文件app。

fun.c的內(nèi)容

#include <stdio.h>

void fun()
{
    printf("This is fun()!\n");
}

main.c的內(nèi)容

extern void fun(); 

int main()
{ 
    fun(); 
    return 0; 
}

Makefile的內(nèi)容

all: main.o fun.o
    gcc -o app main.o fun.o
main.o : main.c 
    gcc -o main.o -c main.c
fun.o : fun.c 
    gcc -o fun.o -c fun.c
clean:
    rm app main.o fun.o

當(dāng)執(zhí)行make命令后,終端會打印下列內(nèi)容轻纪,并生成對應(yīng)的app , main.o ,fun.o文件

gcc -o main.o -c main.c
gcc -o fun.o -c fun.c
gcc -o app main.o fun.o

3. 清除文件

依舊是上面的Makefile和源文件油额,我們輸入make clean,就可以清除剛剛生成的3個文件桐磁。打印信息如下:

$ make clean
rm app main.o fun.o

假如Makfile目錄中悔耘,有名為clean文件,make之后再執(zhí)行make clean又會發(fā)生什么呢我擂?

我們輸入touch clean產(chǎn)生一個空的文件衬以,再執(zhí)行make clean,觀察現(xiàn)象

$ touch clean
$ make clean
$ make: 'clean' is up to date.

此時make提醒clean文件是最新的校摩,而不是執(zhí)行清除操作看峻。

要解決這個問題,我們就得引入偽目標(biāo)衙吩。

偽目標(biāo)

偽目標(biāo)采用".PHONY" 關(guān)鍵字來定義互妓, 且必須是大寫字母。修改一下上面的Makefile

.PHONY:clean

all: main.o fun.o
    gcc -o app main.o fun.o
main.o : main.c 
    gcc -o main.o -c main.c
fun.o : fun.c 
    gcc -o fun.o -c fun.c
clean:
    rm app main.o fun.o

輸入make clean坤塞,我們會發(fā)現(xiàn)此時能夠正常執(zhí)行清除操作冯勉。

makefile內(nèi)容的注釋

在Makefile文件中,有些內(nèi)容我們需要寫一下備注摹芙,或者暫時不需要了灼狰,想注釋掉,需要怎么操作呢浮禾。很簡單交胚,只需要在需要注釋的那行前面加上#號即可,像下面這樣

#這是的Makefile的注釋
#all: main.o fun.o

.PHONY:clean

all: main.o fun.o
    gcc -o app main.o fun.o
main.o : main.c 
    gcc -o main.o -c main.c
fun.o : fun.c 
    gcc -o fun.o -c fun.c
clean:
    rm app main.o fun.o

本文所介紹的Makefile盈电,應(yīng)付幾個文件的編譯還可以蝴簇,在實際的工程中,會有幾十個匆帚、上百個文件熬词。要是都一個個這樣按文件名書寫,效率太低卷扮,且不好維護荡澎。后面的文章,我將會介紹Makefile的變量和函數(shù)晤锹,利用它們摩幔,我們的Makefile可以大大提升效率,且便于維護鞭铆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幽崩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诲祸,更是在濱河造成了極大的恐慌,老刑警劉巖斯辰,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坡疼,居然都是意外死亡彬呻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門柄瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闸氮,“玉大人,你說我怎么就攤上這事教沾∑芽纾” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵授翻,是天一觀的道長或悲。 經(jīng)常有香客問我,道長堪唐,這世上最難降的妖魔是什么巡语? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮淮菠,結(jié)果婚禮上捌臊,老公的妹妹穿的比我還像新娘。我一直安慰自己兜材,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布逞力。 她就那樣靜靜地躺著曙寡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寇荧。 梳的紋絲不亂的頭發(fā)上举庶,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音揩抡,去河邊找鬼户侥。 笑死,一個胖子當(dāng)著我的面吹牛峦嗤,可吹牛的內(nèi)容都是我干的蕊唐。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼烁设,長吁一口氣:“原來是場噩夢啊……” “哼替梨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤副瀑,失蹤者是張志新(化名)和其女友劉穎弓熏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糠睡,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡挽鞠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狈孔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片信认。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖除抛,靈堂內(nèi)的尸體忽然破棺而出狮杨,到底是詐尸還是另有隱情,我是刑警寧澤到忽,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布橄教,位于F島的核電站,受9級特大地震影響喘漏,放射性物質(zhì)發(fā)生泄漏护蝶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一翩迈、第九天 我趴在偏房一處隱蔽的房頂上張望持灰。 院中可真熱鬧,春花似錦负饲、人聲如沸堤魁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妥泉。三九已至,卻和暖如春洞坑,著一層夾襖步出監(jiān)牢的瞬間盲链,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工迟杂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刽沾,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓排拷,卻偏偏與公主長得像侧漓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子攻泼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

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