日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Makefile由浅入深完全学习记录3】伪目标的引入

發(fā)布時(shí)間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Makefile由浅入深完全学习记录3】伪目标的引入 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

只有不停的努力,才能看起來(lái)很輕松!!!加qq1126137994共同學(xué)習(xí)探討更多技術(shù)!!!

1、思考:

makefile中的目標(biāo)究竟是什么?

在默認(rèn)的情況下:

  • make認(rèn)為目標(biāo)對(duì)應(yīng)一個(gè)文件
  • make比較目標(biāo)文件和依賴文件之間的新舊關(guān)系,決定是否執(zhí)行相應(yīng)命令
  • make以文件處理作為第一優(yōu)先級(jí)
  • 但是當(dāng)我們的目標(biāo)不是一個(gè)文件,語(yǔ)法上要有什么變化呢?
    例如下圖:

    當(dāng)執(zhí)行:make clean 時(shí),我們是希望執(zhí)行rm *.o hello.out的命令的。、

    如果文件中沒(méi)有命名為clean的,上述執(zhí)行可以正常進(jìn)行,但是如果當(dāng)文件中存在文件名為clean時(shí),我們執(zhí)行make clean命令,make程序就會(huì)把clean當(dāng)成是那個(gè)文件來(lái)處理,而不會(huì)按上述所說(shuō)的執(zhí)行!

    解決辦法:
    引入偽目標(biāo)

    • 通過(guò).PHONY關(guān)鍵字聲明偽目標(biāo)
    • 偽目標(biāo)不對(duì)應(yīng)任何實(shí)際的文件
    • 偽目標(biāo)的命令總是執(zhí)行,不管偽目標(biāo)的依賴是否有更新都要總是執(zhí)行!!!

    偽目標(biāo)的語(yǔ)法:先聲明,后使用!!!
    本質(zhì):偽目標(biāo)是make程序中特殊目標(biāo).PHONY的依賴

    .PHONY:clean ##注釋## clean:rm *.o hello.out

    下面給出一個(gè)例子來(lái)看看偽目標(biāo)的使用(所依賴的文件func.c與main.c是上一篇文章里的點(diǎn)擊鏈接查看:點(diǎn)擊查看):

    hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.c.PHONY : cleanclean:rm *.o hello.out

    輸入make的運(yùn)行結(jié)果為:

    輸入make clean的運(yùn)行結(jié)果為:

    2、偽目標(biāo)的妙用(函數(shù)調(diào)用)

    偽目標(biāo)的調(diào)用:規(guī)則調(diào)用(函數(shù)調(diào)用)

    hello.out : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.c.PHONY : rebuild clean all ##原理:當(dāng)一個(gè)目標(biāo)的依賴包含偽目標(biāo)時(shí),偽目標(biāo)所定義的命令總是被執(zhí)行rebuild : clean all ##模擬函數(shù)的調(diào)用all : hello.outclean :rm *.o hello.out

    注意:如果我們使用的是GNU的make,用.PHONY聲明偽目標(biāo)沒(méi)有任何問(wèn)題,但是如果我們不是用的GNU的make,有可能其他的make程序不支持,PHONY聲明偽目標(biāo),這個(gè)時(shí)候,我們就需要避開(kāi).PHONY,用其他方法聲明偽目標(biāo)!!!
    可以像如下圖一樣定義偽目標(biāo)clean:

    原理:如果一個(gè)目標(biāo)沒(méi)有命令或者依賴,并且它不是一個(gè)已經(jīng)存在的文件名,在執(zhí)行此規(guī)則時(shí),目標(biāo)總會(huì)認(rèn)為是最新的!!!
    例子:

    hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.cclean:Forcerm *.o hello.outForce:

    運(yùn)行結(jié)果與上述的運(yùn)行結(jié)果一致!!!

    3、總結(jié):

  • 默認(rèn)情況下,make認(rèn)為目標(biāo)對(duì)應(yīng)著一個(gè)文件
  • .PHONY用于聲明一個(gè)偽目標(biāo),偽目標(biāo)不對(duì)應(yīng)實(shí)際的文件
  • 偽目標(biāo)的本質(zhì)是make中特殊目標(biāo).PHONY的依賴
  • 使用偽目標(biāo)可以模擬“函數(shù)調(diào)用”
  • 想一起探討以及獲得各種學(xué)習(xí)資源加我(有我博客中寫的代碼的原稿):
    qq:1126137994
    微信:liu1126137994
    可以共同交流關(guān)于嵌入式,操作系統(tǒng),C++語(yǔ)言,C語(yǔ)言,數(shù)據(jù)結(jié)構(gòu)等技術(shù)問(wèn)題。

    本學(xué)習(xí)記錄完全來(lái)源于狄泰軟件學(xué)院的相關(guān)課程,可以加我q:1126137994或者Q群:199546072 ,給你推薦更多學(xué)習(xí)課程。

    總結(jié)

    以上是生活随笔為你收集整理的【Makefile由浅入深完全学习记录3】伪目标的引入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。