簡體   English   中英

Makefile:具有模式的目標不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM