Make

Makefile中的%符號是什麼意思

  • September 5, 2021

我正在玩makefile,我遇到了**%.o%.c**。據我了解,它指定了所有co文件。但為什麼這樣做:

%.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)一次。

引用自:https://unix.stackexchange.com/questions/346322