0
我在我的Makefile以下規則:重建目標文件時,頭改變
%.o: $(HFILES)
%.o: %.c
$(CC) $(CFLAGS) $*.c
其中HFILES
包含我的項目的所有標題。
問題是,如果標題按預期更改,則不會重新生成目標文件。爲什麼第一行不將頭添加到對象文件的先決條件?
我在我的Makefile以下規則:重建目標文件時,頭改變
%.o: $(HFILES)
%.o: %.c
$(CC) $(CFLAGS) $*.c
其中HFILES
包含我的項目的所有標題。
問題是,如果標題按預期更改,則不會重新生成目標文件。爲什麼第一行不將頭添加到對象文件的先決條件?
因爲這不是模式規則的工作方式。模式規則的文檔說當您創建一個沒有配方的模式規則時取消模式規則(即刪除它)。
由於您的第一行正在創建一個目標爲%.o
和先決條件$(HFILES)
但沒有配方的模式規則,該行簡單地取消了模式規則(不管怎樣都不存在)。
你可以寫:
%.o: %.c $(HFILES)
$(CC) $(CFLAGS) -c -o [email protected] $<
(你不應該把-c
標誌在CFLAGS
變量)。
注意,當然,這意味着如果在HFILES
變化,使用該模式的所有.o
文件的任何頭文件將被重建。