我已经制作了一个 Makefile 来编译我的 C 程序,但是当我更改其中一个 header 时它没有构建对象。
我的生成文件:
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)
我做错了什么?
编辑:在发表精彩评论后对 Makeil 的修正。
最佳答案
虽然还有其他更优雅的技巧,但在你的情况下,我认为是这样的
$(OBJECTS): types.h cstes.h headers.h mysql.h
%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)
应该足够了。
关于c - Makefile 不会在 header 修改时重建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26382794/