五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

9.6Makefile的語法

2020-08-18 12:58 作者:韋東山  | 我要投稿


視頻教程???

韋東山升級版全系列嵌入式免費(fèi)視頻_快速入門篇

通配符

假如一個(gè)目標(biāo)文件所依賴的依賴文件很多,那樣豈不是我們要寫很多規(guī)則,這顯然是不合乎常理的。

我們可以使用通配符,來解決這些問題。

我們對上節(jié)程序進(jìn)行修改代碼如下:?

%.o:表示所用的.o文件

%.c:表示所有的.c文件

$@:表示目標(biāo)

$<:表示第1個(gè)依賴文件

$^:表示所有依賴文件


我們來在該目錄下增加一個(gè)c.c文件,代碼如下:?

然后在main函數(shù)中調(diào)用修改Makefile,修改后的代碼如下:?

執(zhí)行:

make


結(jié)果:

運(yùn)行:

./test


結(jié)果:?

假想目標(biāo): .PHONY

1.我們想清除文件,我們在Makefile的結(jié)尾添加如下代碼就可以了:?

1).執(zhí)行make:生成第一個(gè)可執(zhí)行文件。

2).執(zhí)行make clean: 清除所有文件,即執(zhí)行:rm *.o test。

make后面可以帶上目標(biāo)名,也可以不帶,如果不帶目標(biāo)名的話它就想生成第一個(gè)規(guī)則里面的第一個(gè)目標(biāo)。


2.使用Makefile

執(zhí)行:make [目標(biāo)]

也可以不跟目標(biāo)名,若無目標(biāo)默認(rèn)第一個(gè)目標(biāo)。我們直接執(zhí)行make的時(shí)候,會(huì)在makefile里面找到第一個(gè)目標(biāo)然后執(zhí)行下面的指令生成第一個(gè)目標(biāo)。當(dāng)我們執(zhí)行make clean的時(shí)候,就會(huì)在Makefile里面找到clean這個(gè)目標(biāo),然后執(zhí)行里面的命令,這個(gè)寫法有些問題,原因是我們的目錄里面沒有clean這個(gè)文件,這個(gè)規(guī)則執(zhí)行的條件成立,他就會(huì)執(zhí)行下面的命令來刪除文件。

如果:該目錄下面有名為clean文件怎么辦呢?

我們在該目錄下創(chuàng)建一個(gè)名為“clean”的文件,然后重新執(zhí)行:make然后make clean,結(jié)果(會(huì)有下面的提示:):?

make: `clean' is up to date.

它根本沒有執(zhí)行我們的刪除操作,這是為什么呢?

我們之前說,一個(gè)規(guī)則能過執(zhí)行的條件:

1).目標(biāo)文件不存在

2).依賴文件比目標(biāo)新。?


現(xiàn)在我們的目錄里面有名為“clean”的文件,目標(biāo)文件是有的,并且沒有依賴文件,沒有辦法判斷依賴文件的時(shí)間。這種寫法會(huì)導(dǎo)致:有同名的"clean"文件時(shí),就沒有辦法執(zhí)行make clean操作。解決辦法:我們需要把目標(biāo)定義為假想目標(biāo),用關(guān)鍵字PHONY。?

.PHONY: clean ?//把clean定義為假想目標(biāo)。他就不會(huì)判斷名為“clean”的文件是否存在,

然后在Makfile結(jié)尾添加.PHONY: clean語句,重新執(zhí)行:make clean,就會(huì)執(zhí)行刪除操作。?



變量

在makefile中有兩種變量:

1)簡單變量(即時(shí)變量):

A?:= xxx ? # A的值即刻確定,在定義時(shí)即確定

對于即時(shí)變量使用“:=”表示,它的值在定義的時(shí)候已經(jīng)被確定了?


2)延時(shí)變量

B = xxx ? ?# B的值使用到時(shí)才確定

對于延時(shí)變量使用“=”表示。它只有在使用到的時(shí)候才確定,在定義/等于時(shí)并沒有 確定下來。?


想使用變量的時(shí)候使用“$”來引用,如果不想看到命令是,可以在命令的前面加上"@"符號,就不會(huì)顯示命令本身。當(dāng)我們執(zhí)行make命令的時(shí)候,make這個(gè)指令本身,會(huì)把整個(gè)Makefile讀進(jìn)去,進(jìn)行全部分析,然后解析里面的變量。常用的變量的定義如下:?


:=? ?# 即時(shí)變量

=? ? # 延時(shí)變量

?=? ?# 延時(shí)變量, 如果是第1次定義才起效, 如果在前面該變量已定義則忽略這句

+=? ?# 附加, 它是即時(shí)變量還是延時(shí)變量取決于前面的定義

?=:如果這個(gè)變量在前面已經(jīng)被定義了,這句話就不會(huì)起效果,


實(shí)例:?

執(zhí)行:

make


結(jié)果:?

分析:

1) A?:= $(C): A為即時(shí)變量,在定義時(shí)即確定,由于剛開始C的值為空,所以A的值也為空。

2) B = $(C): ?B為延時(shí)變量,只有使用到時(shí)它的值才確定,當(dāng)執(zhí)行make時(shí),會(huì)解析Makefile里面的所用變量,所以先解析C = abc,然后解析C += 123,此時(shí),C = abc 123,當(dāng)執(zhí)行:@echo B = $(B) B的值為 abc 123。

3) D??= weidongshan: D變量在前面沒有定義,所以D的值為weidongshan,如果在前面添加D = 100ask,最后D的值為100ask。

我們還可以通過命令行存入變量的值 例如:

執(zhí)行:

make D=123456

里面的D??= weidongshan這句話就不起作用了。

結(jié)果:?

視頻教程???

韋東山升級版全系列嵌入式免費(fèi)視頻_快速入門篇


9.6Makefile的語法的評論 (共 條)

分享到微博請遵守國家法律
枣庄市| 沙湾县| 建湖县| 木兰县| 博客| 正宁县| 井冈山市| 山丹县| 东乡| 保亭| 肇东市| 东莞市| 乌兰察布市| 苍梧县| 吉木乃县| 江口县| 江孜县| 名山县| 灌阳县| 定边县| 思茅市| 札达县| 黑水县| 西峡县| 富民县| 桐柏县| 盐源县| 莱西市| 赤壁市| 清丰县| 开封县| 横峰县| 全椒县| 盖州市| 德格县| 尚志市| 阿荣旗| 贺州市| 孝感市| 广德县| 德惠市|