天天看點

定義指令包

定義指令包

如果Makefile中出現一些相同指令序列,那麼我們可以為這些相同的指令序列定義一個變量。定義這種指令序列的文法以“define”開始,以“endef”結束,如:

define run-yacc

yacc $(firstword $^)

mv y.tab.c $@

endef

這裡,“run-yacc”是這個指令包的名字,其不要和Makefile中的變量重名。在“define”和“endef”中的兩行就是指令序列。這個指令包中的第一個指令是運作Yacc程式,因為Yacc程式總是生成“y.tab.c”的檔案,是以第二行的指令就是把這個檔案改改名字。還是把這個指令包放到一個示例中來看看吧。

foo.c : foo.y

$(run-yacc)

我們可以看見,要使用這個指令包,我們就好像使用變量一樣。在這個指令包的使用中,指令包“run-yacc”中的“$^”就是“foo.y”, “$@”就是“foo.c”(有關這種以“$”開頭的特殊變量,我們會在後面介紹),make在執行指令包時,指令包中的每個指令會被依次獨立執行。

原文

http://wiki.ubuntu.org.cn/index.php?title=%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile:%E4%B9%A6%E5%86%99%E5%91%BD%E4%BB%A4&variant=zh-hant

繼續閱讀