make常見規則解析(轉)
這是一段在Makefile中常見的規則
clean:
rm -r core *.o *.a tmp_make
for i in *.c; do rm -f `basename $$i .c`.s; done
(cd chr_drv; make clean)
(cd blk_drv; make clean)
(cd math; make clean)
第一句的 rm -f core *. *.a tmp_make 作用只是刪除檔案,意思直白,沒什麼好說的。
第二句 for 迴圈遍歷目錄下所有的檔案,將所有字尾名為.c檔名依次賦給i。然後執行do語句,當符合迴圈結束是執行done。可以說這裡的for和shell裡for語法是如此貌似。
我們可以來做個實驗來驗證一下:
$ mkdir test #建立個實驗用的目錄
$ cd test
$ touch a.x #建幾個實驗用的檔案
$ touch b.x
$ touch yy.x
$ vi Makefile #寫個實驗指令碼
在檔案中寫入:
clean:
for i in *.x; do echo $$i; done
寫好後,儲存退出。執行命令:
$ make
隨後可看到輸出的結果:
for i in *.x;do echo $i;done
a.x
b.x
yy.x
看到結果,for語句實現的功能就很清楚了。
對於結果,有一個怪異的就是,原來指令碼中的$$i,在輸出是就變成了$i。這時的for是不是就是一樣了。現在可以先做個結論,make處理指令碼可shell處理指令碼幾乎雷同,只是個別情況下要做變通。make會對$x進行擴充套件。比如:
ec=echo
test:
$(ec) 'ddd'
就可以在螢幕上看到輸出:
echo 'ddd'
ddd
所以應該是make對Makefile進行處理,將其變成shell可執行的指令碼,最後由shell直譯器來執行有make翻譯過的指令碼。並且是翻譯一句然後shell執行一句,對於這個可以再做個驗證。
e =echo
prt=ls
clean:
$(prt)
for i in *.x;do $e $$i;done
其輸出為:
ls
a.sh a.x b.x Makefile yy.x
for i in *.x;do echo $i;done
a.x
b.x
yy.x
可以看到,$(prt)被擴充套件後就立即執行了。後面的for也是這樣。
到這裡開篇的那個例子算是解析完畢了。下面在看看Makefile中的規則定義,在make中的規則分為兩種,一種是顯示規則,另一種無可爭議的就是隱含規則了。
顯示規則,定義如下
目標檔案 : 依賴檔案
生成目標檔案的規則
隱含規則
.原始檔副檔名.目標副檔名:
生成目標檔案的規則
在使用隱含規則時要使用一些內定宏來指定檔名:
$@ 全路徑的目標檔案
$* 去除擴張名的全路徑的目標檔案
$? 所有原始檔名
$
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-939769/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- eslint常見規則列表EsLint
- 業務規則的常見問題解答
- 常見的社會潛規則有哪些?
- 輪換代理的四種常見輪換規則
- iptables防火牆簡介,原理,規則編寫,常見案例防火牆
- Nginx 跳轉規則Nginx
- 軟體開發的常見認知規律和原則 - Reflectoring
- weex常見問題解析
- SVN常見符號解析符號
- 常見編碼規範
- NO.A.0002——make.常見的監控軟體介紹
- 金額常見正則校驗
- 常見面試題 - URL 解析面試題
- 常見的正規表示式
- 域名解析常見問題(下)
- 域名解析常見問題(上)
- react 常見setState的原理解析React
- 常見轉義符學習
- 【原始碼解析】AsyncTask的用法與規則原始碼
- UTF-8編碼規則(轉)
- ? 圖解 == 操作符規則和不同型別間轉換規則圖解型別
- JDK1.8原始碼解析(常見類)JDK原始碼
- k8s-----常見故障及解析K8S
- Oracle redo解析之-3、常見change分析Oracle Redo
- 常見裝置螢幕解析度
- 常見規格排列組合問題
- 程式碼規範設定常見英文
- 常見的資料設計規範
- react-router v4 路由規則解析React路由
- 求職面試常見問題:Python常見面試題全解析附答案求職Python面試題
- oracle資料隱式轉換規則Oracle
- JS資料型別轉換規則JS資料型別
- java 基本型別的轉換規則Java型別
- DNS解析常見問題:如何新增A記錄?DNS
- 2019年常見ElasticSearch 面試題解析(上)Elasticsearch面試題
- 常見六大Web安全攻防解析Web
- 域名解析需要多久生效?域名解析常見問題解答
- DNS解析常見問題:域名解析生效原理及時間DNS
- 七種常見的物件導向設計原則物件