簡體   English   中英

Makefile不會在標題修改時重建對象

[英]Makefile doesn't rebuild objects on header modification

我已經制作了一個Makefile來編譯我的C程序,但是當我更改其中一個標頭時,它不是在構建對象。

我的MakeFile:

CC=gcc
CFLAGS=-O3 -Wall
LDFLAGS=-I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu -lmysqlclient
SOURCES=$(wildcard *.c)
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=bin/beta_parser

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

%.o:%.c types.h cstes.h headers.h mysql.h 
    $(CC) -o $@ -c $< $(CFLAGS)

.PHONY: clean mrproper

clean:
    rm -rf *.o

mrproper:
    rm -rf $(EXEC)

我做錯了什么?

編輯:馬克蒂爾的評論在一個偉大的評論。

掃描源中的依賴項不在Make的范圍內(盡管還有其他工具,例如CMake會自動執行此操作)。 您需要添加一個顯式規則來生成這些依賴關系,但這可以通過許多不同的方式來完成。 我有時使用以下技術:

OBJECTS = ....
-include $(OBJECTS:.o=.d)
...
$(OBJECTS): %.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
    $(CC) $(CFLAGS) $(DEPFLAGS) $< > $*.d

Google的“使依賴項自動生成”功能還將向您展示其他方法。

盡管還有其他更巧妙的技巧,但您認為,

$(OBJECTS): types.h cstes.h headers.h mysql.h

%.o: %.c
    $(CC) -o $@ -c $< $(CFLAGS)

應該足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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