Makefile函數eval理解

來源:互聯網
上載者:User

標籤:

  1. Makefile函數eval理解

    函數"eval"是一個比較特殊的函數。使用它我們可以在我們的Makefile中構造一個可變的規則結構關係(依賴關係鏈),其中可以使用其它變數和函數。函數"eval"對它的參數進行展開,展開的結果作為Makefile的一部分,make可以對展開內容進行文法解析。展開的結果可以包含一個新變數、目標、隱含規則或者是明確規則等。也就是說此函數的功能主要是:根據其參數的關係、結構,對它們進行替換展開。

     

    函數"eval"的傳回值時空,也可以說沒有傳回值。

    函數說明:"eval"函數執行時會對它的參數進行兩次展開。第一次展開過程發是由函數本身完成的,第二次是函數展開後的結果被作為Makefile內容時由make解析時展開的。明確這一點對於使用"eval"函數非常重要。在理解了函數"eval"二次展開的過程後。實際使用時,當函數的展開結果中存在引用(格式為:$(x))時,那麼在函數的參數中應該使用"$$"來代替"$"。因為這一點,所以通常它的參數中會使用函數"value"來取一個變數的文本值

  2. Eval例子

    #example Makefile

     

    OBJ=a.o b.o c.o d.o main.o

    Define TEST

    Main:$(OBJ)

        Gcc –g –o main $$(OBJ)

    Endef

     

    $(eval $(call TEST))

     

    根據上面的說明,evel 對 $(call TEST)進行展開,(第一次展開)展開結果為

    Main:a.o b.o c.o d.o main.o

        Gcc –g –o main $(OBJ)

    大家可以看到$(OBJ)展開,而$$(OBJ)稱為$(OBj)符合Makefile的展開規則

    然後Makefile對上面的進行解析展開為

    Main:a.o b.o c.o d.o main.o

        Gcc –g –o main a.o b.o c.o d.o main.o

    因此會產生以上黑體字的一個編譯,至此,相信大家對Makefile的eval函數應該有了一個真實的瞭解

Makefile函數eval理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.