【Makefile由浅入深完全学习记录3】伪目标的引入
只有不停的努力,才能看起來很輕松!!!加qq1126137994共同學習探討更多技術!!!
1、思考:
makefile中的目標究竟是什么?
在默認的情況下:
但是當我們的目標不是一個文件,語法上要有什么變化呢?
例如下圖:
當執(zhí)行:make clean 時,我們是希望執(zhí)行rm *.o hello.out的命令的。、
如果文件中沒有命名為clean的,上述執(zhí)行可以正常進行,但是如果當文件中存在文件名為clean時,我們執(zhí)行make clean命令,make程序就會把clean當成是那個文件來處理,而不會按上述所說的執(zhí)行!
解決辦法:
引入偽目標
- 通過.PHONY關鍵字聲明偽目標
- 偽目標不對應任何實際的文件
- 偽目標的命令總是執(zhí)行,不管偽目標的依賴是否有更新都要總是執(zhí)行!!!
偽目標的語法:先聲明,后使用!!!
本質:偽目標是make程序中特殊目標.PHONY的依賴
下面給出一個例子來看看偽目標的使用(所依賴的文件func.c與main.c是上一篇文章里的點擊鏈接查看:點擊查看):
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的運行結果為:
輸入make clean的運行結果為:
2、偽目標的妙用(函數調用)
偽目標的調用:規(guī)則調用(函數調用)
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 ##原理:當一個目標的依賴包含偽目標時,偽目標所定義的命令總是被執(zhí)行rebuild : clean all ##模擬函數的調用all : hello.outclean :rm *.o hello.out注意:如果我們使用的是GNU的make,用.PHONY聲明偽目標沒有任何問題,但是如果我們不是用的GNU的make,有可能其他的make程序不支持,PHONY聲明偽目標,這個時候,我們就需要避開.PHONY,用其他方法聲明偽目標!!!
可以像如下圖一樣定義偽目標clean:
原理:如果一個目標沒有命令或者依賴,并且它不是一個已經存在的文件名,在執(zhí)行此規(guī)則時,目標總會認為是最新的!!!
例子:
運行結果與上述的運行結果一致!!!
3、總結:
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關于嵌入式,操作系統(tǒng),C++語言,C語言,數據結構等技術問題。
本學習記錄完全來源于狄泰軟件學院的相關課程,可以加我q:1126137994或者Q群:199546072 ,給你推薦更多學習課程。
總結
以上是生活随笔為你收集整理的【Makefile由浅入深完全学习记录3】伪目标的引入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 办公计算机配件,办公电脑加装傲腾如丝般顺
- 下一篇: GMSSL