歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux Make常見規則解析

Linux Make常見規則解析

日期:2017/4/19 14:20:18   编辑:Linux服務器

隨著Linux的深入了解,我們知道為什麼Linux會趕上微軟。在當今社會Linux越來越成為主流,本文為你詳細介紹Linux Make規則,為你在學習Linux Make規則時起一定的作用。這是一段在Makefile中常見的規則 。

  1.clean:

  2.rm -r core *.o *.a tmp_make

  3.for i in *.c; do rm -f `basename $i .c`.s; done

  4.(cd chr_drv; make clean)

  5.(cd blk_drv; make clean)

  6.(cd math; make clean)

  第一句的 rm -f core *. *.a tmp_make 作用只是刪除文件,意思直白,沒什麼好說的。

  第二句 for 循環遍歷目錄下所有的文件,將所有後綴名為.c文件名依次賦給i。然後執行do語句,當符合循環結束是執行done。可以說這裡的for和shell裡for語法是如此貌似。

  我們可以來做個實驗來驗證一下:

  1.$ mkdir test #建立個實驗用的目錄

  2.$ cd test

  3.$ touch a.x #建幾個實驗用的文件

  4.$ touch b.x

  5.$ touch yy.x

  6.$ vi Makefile #寫個實驗腳本

  在文件中寫入:

  clean:

  for i in *.x; do echo $i; done

  寫好後,保存退出。運行命令:

  $ make

  隨後可看到輸出的結果:

  1.for i in *.x;do echo $i;done

  2.a.x

  3.b.x

  4.yy.x

  看到結果,for語句實現的功能就很清楚了。

  對於結果,有一個怪異的就是,原來腳本中的$i,在輸出是就變成了$i。這時的for是不是就是一樣了。現在可以先做個結論,make處理腳本可shell處理腳本幾乎雷同,只是個別情況下要做變通。make會對$x進行擴展。比如:

  1.ec=echo

  2.test:

  3.$(ec) 'ddd'

  就可以在屏幕上看到輸出:

  1.echo 'ddd'

  2.ddd

  所以應該是make對Makefile進行處理,將其變成shell可執行的腳本,最後由shell解釋器來執行有make翻譯過的腳本。並且是翻譯一句然後shell執行一句,對於這個可以再做個驗證。

  1.e =echo

  2.prt=ls

  3.clean:

  4.$(prt)

  5.for i in *.x;do $e $i;done

  其輸出為:

  1.ls

  2.a.sh a.x b.x Makefile yy.x

  3.for i in *.x;do echo $i;done

  4.a.x

  5.b.x

  6.yy.x

  可以看到,$(prt)被擴展後就立即執行了。後面的for也是這樣。

  到這裡開篇的那個例子算是解析完畢了。下面在看看Makefile中的規則定義,在make中的規則分為兩種,一種是顯示規則,另一種無可爭議的就是隱含規則了。

  顯示規則,定義如下

  目標文件 : 依賴文件

  生成目標文件的規則

  隱含規則

  .源文件擴展名.目標文件擴展名:

  生成目標文件的規則

  在使用隱含規則時要使用一些內定宏來指定文件名:

  $@ 全路徑的目標文件

  $* 去除擴張名的全路徑的目標文件

  $? 所有源文件名

  {GetProperty(Content)}lt; 源文件名

  以上就是Linux Make規則的知識

Copyright © Linux教程網 All Rights Reserved