makefile--變量與函數(shù)的綜合示例

變量與函數(shù)的綜合示例


1.項目需求

  • 自動生成target文件夾存放可執(zhí)行文件
  • 自動生成objs文件夾存放編譯生成的目標文件(*.o)
  • 支持調(diào)試版本的編譯選項
  • 考慮代碼的擴展性

2. 關鍵語法

  • $(wildcard _pattern)
    獲取當前工作目錄中滿足_pattern的文件或目錄列表
  • $(addprefix _prefix,_names)
    給名字列表_names中的每一個名字增加前綴_prefix

3. 關鍵技巧

  • 自動獲取當前目錄下的源文件列表(函數(shù)調(diào)用)
SRCS += $(wildcard *.c)
  • 根據(jù)源文件列表生成目標文件列表(變量的值替換)
OBJS := $(SRCS:.c=.o)
  • 對每一個目標文件列表加上路徑前綴(函數(shù)調(diào)用)
OBJS := $(addprefix path/,$(OBJS))

4. 規(guī)則中的模式替換(目錄結構)

本質(zhì):匹配當前目錄下的文件看峻,然后根據(jù)模式將當前目錄下的文件進行特定替換
前提:工作目錄中存在func.c main.c
說明:

  • %.c用于模式匹配當前目錄下的文件
  • %.o用于將%.c匹配成功的文件名進行模式替換衙吩,.c替換.o
%.o : %.c
    gcc -o $@ -c $^

與變量的值替換的區(qū)別:
變量值替換是從給定的列表中將文件一一進行匹配互妓,然后放入指定的依賴中;變量值替換如下所示:

OBJS := func.o main.o
$(OBJS) :  %.o : %.c
    gcc -o $@ -c $^

編譯規(guī)則的依賴如下:


![10-1.PNG](https://upload-images.jianshu.io/upload_images/10834716-2f45145c35635422.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

示例代碼--變量與函數(shù)的綜合應用
源代碼如下:
const.c

const char* g_hello = "hello-makefile";

func.c

#include "stdio.h"
extern char* g_hello;

void foo()
{
    printf("void foo():%s\n".g_hello);
}   

main.c

extern void foo();

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

makefile

CC := gcc
MKDIR := mkdir
RM := rm -rf

DIR_OBJS := objs
DIR_TARGET := target

DIRS := $(DIR_OBJS) $(DIR_TARGET)

#target/hello-makefile.out
TARGET := $(DIR_TARGET/hello-makefile.out
#SRCS = {const.c func.c main.c}
SRCS := $(wildcard *.c)
#OBJS = {const.o func.o main.o}
OBJS := $(SRCS:.c=.o)
#OBJS ={objs/const.o objs/func.o objs/main.o}
OBJS = $(addprefix $(DIR_OBJS)/,$(OBJS))

.PHONY : rebuild clean all

$(TARGET) : $(DIRS) $(OBJS)
    $(CC) -o $@ $(OBJS)
    @echo "Target file => $@"
    

$(DIRS) :
    $(MKDIR) $@
    
$(DIR_OBJS)/%.o : %.c
    ifeq ($(DEBUG),true)
    $(CC) -o $@ -g -c $^
    else
    $(CC) -o $@ -c $^
    endif
    
rebuild : clean all

all : $(TARGET)

clean :
    $(RM) $(DIRS)

10-1.PNG

執(zhí)行結果如下:

10-2.PNG

下列左圖為命令行執(zhí)行make DEBUG:=true的結果坤塞;右圖為命令行執(zhí)行make的結果车猬;可以看到,當命令行指定DEUBG值之后尺锚,進入target文件夾后命令行執(zhí)行objdump -S hello-makefile.out可以看到匯編調(diào)試代碼中出現(xiàn)了源文件中的代碼珠闰,方便進行調(diào)試。而右圖僅僅只有匯編部分代碼瘫辩。

10-3.PNG

小結:

  • 目錄可以成為目標的依賴,在規(guī)則中創(chuàng)建目錄
  • 預定義函數(shù)是makefile實戰(zhàn)時不可或缺的部分
  • 規(guī)則中的模式匹配可以直接針對目錄中的文件
  • 可以使用命令行變量編譯特殊的目標版本
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伐厌,一起剝皮案震驚了整個濱河市承绸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挣轨,老刑警劉巖军熏,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卷扮,居然都是意外死亡荡澎,警方通過查閱死者的電腦和手機均践,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摩幔,“玉大人彤委,你說我怎么就攤上這事』蚝猓” “怎么了焦影?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長封断。 經(jīng)常有香客問我斯辰,道長,這世上最難降的妖魔是什么坡疼? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任彬呻,我火速辦了婚禮,結果婚禮上回梧,老公的妹妹穿的比我還像新娘废岂。我一直安慰自己祖搓,他們只是感情好狱意,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拯欧,像睡著了一般详囤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镐作,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天藏姐,我揣著相機與錄音,去河邊找鬼该贾。 笑死羔杨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的杨蛋。 我是一名探鬼主播兜材,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逞力!你這毒婦竟也來了曙寡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寇荧,失蹤者是張志新(化名)和其女友劉穎举庶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揩抡,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡户侥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年镀琉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片添祸。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡滚粟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刃泌,到底是詐尸還是另有隱情凡壤,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布耙替,位于F島的核電站亚侠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俗扇。R本人自食惡果不足惜硝烂,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铜幽。 院中可真熱鬧滞谢,春花似錦、人聲如沸除抛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽到忽。三九已至橄教,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喘漏,已是汗流浹背护蝶。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翩迈,地道東北人持灰。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像负饲,于是被迫代替她去往敵國和親堤魁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評論 0 5
  • 來自陳浩的一片老文绽族,但絕對營養(yǎng)姨涡。 示例工程:3 個頭文件*.h,和 8 個 C 文件*.c吧慢。 初 編譯過程涛漂,源文件...
    周筱魯閱讀 4,696評論 0 17
  • 常言說三個女人一臺戲,我們的辦公室里,有十幾個女性同事匈仗,一天到晚好戲不斷瓢剿。 辦公室里有幾個正在談戀愛的小姑娘,隔三...
    黃梅枝閱讀 332評論 12 14
  • 感恩我的摩托車失而復得悠轩,警察同志給力的追蹤间狂,哎呀我的小心臟也刺激了一把,這也許就是我平常保護別人財產(chǎn)的種子開花了吧...
    鄔靜閱讀 105評論 0 1
  • 銀河帝國正走向覆亡火架。 這是一個龐大的帝國鉴象,從銀河每條巨大旋臂此端至彼端,其間數(shù)百萬個世界何鸡,皆為帝國的勢力范圍纺弊。因而...
    我瘋啦我膨脹啦閱讀 241評論 0 0