Make
Makefile中的%符號是什麼意思
我正在玩makefile,我遇到了**%.o或%.c**。據我了解,它指定了所有c或o文件。但為什麼這樣做:
%.o: %.c $(CC) -c $^ -o $@
這不起作用
SOURCE := $(wildcard *.c) $(SOURCE:.c=.o): SOURCE $(CC) -c $^ -o $@
兩個表達式都指定了所有文件。那麼make 文件中的**%.o:**符號是做什麼的?
兩個表達式都指定了所有文件。
不,第一條規則告訴如何在給定相應文件的
make
情況下獲取文件。注意單數:單個文件。.o``.c
第二條規則(聲稱)告訴
make
如何獲取一堆.o
文件,給定另一堆相應的.c
文件。注意複數:所有.c
文件*.c
都由 globbing 產生。附帶說明一下,
%.o: %c
是一個 GNU 擴展。另一方面,您不會學習如何
make
在 StackOverflow 上使用。你應該考慮讀一本書。
構造:
%.o: %.c $(CC) -c $^ -o $@
是一個模式規則,它是一種隱式規則。它指定一個目標和一個
$(CC)
依賴項,並為每個目標呼叫一次。雖然這樣:SOURCE := $(wildcard *.c) $(SOURCE:.c=.o): $(SOURCE) $(CC) -c $^ -o $@
是一個標準規則,但它(可能)有許多目標和許多依賴項。然而,儘管如此,它只會呼叫
$(CC)
一次。