日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Makefile之静态模式(7)

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Makefile之静态模式(7) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

靜態模式

????? makefile中,一個規則中可以有多個目標,規則所定義的命令對所有的目標有效。一個具有多目標的規則相當于多個規則。使用多目標可以使makefile文件變得簡潔。
????? 靜態模式規則是這樣一個規則:規則存在多個目標,并且不同的目標可以根據目標文件的名字來自動構造出依賴文件。
????? 靜態模式可以更加容易地定義多目標的規則,可以讓我們的規則變得更加的有彈性和靈活。我們還是先來看一下語法:

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


??? targets定義了一系列的目標文件,可以有通配符。是目標的一個集合。

??? target-parrtern是指明了targets的模式,也就是的目標集模式。

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

?????? 簡單的解釋一下:如果我們的<target-parrtern>定義成 “%.o”,意思是我們的<target>集合中都是以“.o”結尾的,而如果我們的<prereq-parrterns>定義成“%.c”,意思是對<target-parrtern>所形成的目標集進行二次定義,其計算方法是,取<target- parrtern>模式中的“%”(也就是去掉了[.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”。而命令中的“$<”和“$@”則是自動化變量(見[makefile筆記]之七),“$<”表示所有的依賴目標集(也就是 “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”有幾百個,那種我們只要用這種很簡單的“靜態模式規則”就可以寫完一堆規則,實在是太有效率了

總結

以上是生活随笔為你收集整理的Makefile之静态模式(7)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。