2010-12-15 57 views
2

我正在使用GNU make。在我得到的Makefile中,我看到符號'%'。例如在 %.c,%.asm,%.o等等的背景下(是否會返回該擴展名的所有文件的通配符)GNU Make中`%`字符的作用是什麼?

%是什麼意思?

什麼將下面的規則來實現:

%.o: %.c 
    gcc $< -o:[email protected] 

謝謝你,

〜AD

+0

這個問題是「通配符的目的是什麼?」還有一個問題的措辭是「我怎樣才能達到目的」,回答「通配符!」我會把它稱爲反向重複:-)這是問題:http://stackoverflow.com/questions/1633527/wildcard-targets-in-a-makefile – 2010-12-15 15:41:46

+0

我在閱讀有關模式規則:gnu.org/軟件/ automake/manual/make/Pattern-Rules.html在那裏我讀了一條聲明:「模式規則看起來像一個普通的規則,只不過它的目標包含字符'%'(恰好就是其中之一)。」他們中的哪一個意味着什麼? – goldenmean 2010-12-15 15:50:45

回答

2

規則:

%.o: %.c 
    gcc $< -o:[email protected] 

將爲每個C文件建立一個目標文件使用它下面的命令。所以是的,%就像一個通配符,但我傾向於認爲它是「對於每一個」,因爲這是規則的結果。 $<表示依賴文件,[email protected]表示要構建的對象。如果你這樣做:

fred.o: fred.c 
    gcc $< -o:[email protected] 

這裏[email protected]=fred.o$<=fred.c同樣

fred.o: fred.c george.c 
    gcc $< -o:[email protected] 

[email protected]=fred.o$<=fred.c george.c

編輯:從我將擴大這個命令。

%將匹配與它相匹配的所有內容。所以%.c表示當前目錄中的所有.c文件。 asm/%.asm表示擴展名爲.asm的subdir asm中的所有文件。它就像一個令牌一樣,所以無論什麼時候你會在下一次使用%時使用它,即在標籤中。

因此,該規則:

objs/asm/%.o: arch/%.S 
    nasm -felf64 $< -o [email protected] 

鑑於arch/hello.Sarch/bye.Sarch/somethingelse.S將創建obj/asm/hello.oobj/asm/bye.Sobj/asm/somethingelse.o

+0

我在http://www.gnu.org/software/automake/manual/make/Pattern-Rules.html上閱讀關於模式規則的內容。在那裏,我讀了一條聲明:「模式規則看起來像一條普通的規則,除了它的目標包含字符'%'(恰好其中之一)「。它們中的一個是什麼意思?另外我有一個模式規則,如:%.obj:isp /%.asm $(ASM)$ <-o:$ @但不知怎麼的,它並沒有選擇所有彙編的彙編文件。我稍後將一個程序集文件添加到該文件夾​​,並且沒有組裝。必須手動添加該文件的構建規則。 – goldenmean 2010-12-15 15:50:10

+0

這意味着無論%代表什麼都會被使用%提到。你無法一次匹配兩件事。該規則將匹配isp/somename.asm中的所有內容並創建somename.o。試試ls isp/*。asm。這就是isp /%。asm會匹配的。然後它會佔用%,並在末尾放置一個.o,這就成爲了規則的名稱(要做的事情)。 – 2010-12-15 15:55:23

+0

好吧,所以如果%.asm表示每個asm文件,則將其中的每一個轉換爲* .obj。所以當我添加一個更多的asm文件到文件夾中的現有文件,但它沒有得到組裝?可能是什麼原因。對不起,我有點困惑? – goldenmean 2010-12-15 16:01:55