[英]Makefile: target with pattern does not work
我的Makefile如下所示:
BIN = bin
OBJECTS = object1.o \
object2.o \
object3.o
HDR = $(OBJECTS:%.o=%.h) header1.h header2.h
MAIN = main.c
CC = gcc
CFLAGS = -Wall -g -std=c99 -fstack-protector-all
LDFLAGS = -lpthread
$(BIN): $(OBJECTS) $(MAIN)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
%.o: %.c $(HDR)
$(CC) $(CFLAGS) -c $< -o $@
似乎未使用%.o: %.c $(HDR)
規則。 當使用選項make -r
調用時,它說沒有使目標object.o
規則。 每個目標文件的構建都應取決於每個頭文件。 我想念什么?
編輯:我應該提一下,在執行echo $(HDR)
,它看起來像變量包含正確的值: object1.h object2.h object3.h header1.h header2.h
在HDR的聲明中,嘗試使用$(OBJECTS:.o = .h)。 或者,更好的是,使用gcc -MM
等代替生成您的依賴項 。
模式規則不能具有輔助依賴項,例如${HDR}
。
采用:
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
${OBJECTS}: ${HDR}
好的,給定的Makefile應該可以工作,我在其中一個頭文件名中輸入了錯字。
這很可惜,但make對此並沒有發出警告。 似乎當基於模式的規則缺少先決條件時,它就會被忽略。 而是使用內置的.o
創建規則。
喬納森·萊弗勒(Jonathan Leffler)提出的${OBJECTS}: ${HDR}
提議,是因為存在一個錯誤,即“沒有規則使目標拼寫錯誤。
因此,我只同意蓬松,最好使用自動生成的依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.