make的靜態模式

來源:互聯網
上載者:User

make的靜態模式

靜態模式可以更加容易地定義多目標的規則,可以讓我們的規則變得更加的有彈性和靈活。我們還是先來看一下文法:

<targets ...>: <target-pattern>: <prereq-patterns ...>

<commands>

...

targets定義了一系列的目標檔案,可以有萬用字元。是目標的一個集合。

target-pattern是指明了targets的模式,也就是的目的地組模式。

prereq-patterns是目標的依賴模式,它對target-pattern形成的模式再進行一次依賴目標的定義。

這樣描述這三個東西,可能還是沒有說清楚,還是舉個例子來說明一下吧。如果我們的<target-pattern>定義成“%. o”,意思是我們的<target>集合中都是以“.o”結尾的,而如果我們的<prereq-patterns>定義成 “%.c”,意思是對<target-pattern>所形成的目的地組進行二次定義,其計算方法是,取<target- pattern>模式中的“%”(也就是去掉了[.o]這個結尾),並為其加上[.c]這個結尾,形成的新集合。

所以,我們的“目標模式”或是“依賴模式”中都應該有“%”這個字元,如果你的檔案名稱中有“%”那麼你可以使用反斜線“\”進行轉義,來標明真實的“%”字元。

看一個例子:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c

$(CC) -c $(CFLAGS) $< -o $@

上面的例子中,指明了我們的目標從$object中擷取,“%.o”表明要所有以“.o”結尾的目標,也就是“foo.o bar.o”,也就是變數$object集合的模式,而依賴模式“%.c”則模數式“%.o”的“%”,也就是“foo bar”,並為其加下“.c”的尾碼,於是,我們的依賴目標就是“foo.c bar.c”。而命令中的“$<”和“$@”則是自動化變數,“$<”表示所有的依賴目的地組(也就是 “foo.c bar.c”),“$@”表示目的地組(也就是“foo.o bar.o”)。於是,上面的規則展開後等價於下面的規則:

foo.o : foo.c

$(CC) -c $(CFLAGS) foo.c -o foo.o

bar.o : bar.c

$(CC) -c $(CFLAGS) bar.c -o bar.o

試想,如果我們的“%.o”有幾百個,那種我們只要用這種很簡單的“靜態模式規則”就可以寫完一堆規則,實在是太有效率了。“靜態模式規則”的用法很靈活,如果用得好,那會一個很強大的功能。再看一個例子:

files = foo.elc bar.o lose.o

$(filter %.o,$(files)): %.o: %.c

$(CC) -c $(CFLAGS) $< -o $@

$(filter %.elc,$(files)): %.elc: %.el

emacs -f batch-byte-compile $<

$(filter %.o,$(files))表示調用Makefile的filter函數,過濾“$files”集,只要其中模式為“%.o”的內容。其的它內容,我就不用多說了吧。這個例子展示了Makefile中更大的彈性。

原文

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%E8%A7%84%E5%88%99&variant=zh-hant

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.