我正在制作一个编译位于多个目录中的程序的makefile。所有源文件都在 /src 中,头文件在 /inc 中,目标文件将在 /obj 中创建,而可执行文件将在 /bin 中创建。makefile 共有三个,一个整体,一个在 /obj 目录,一个在 /bin 目录。obj makefile 创建目标文件,bin makefile 链接文件创建可执行文件。我不应该对值进行硬编码,因为这个 makefile 需要尽可能通用,这包括硬编码文件和目录名称。
下面的代码是创建目标文件的生成文件。它会创建目标文件,但不会正确检查依赖关系,因此当我更新一个文件时,它将重新创建所有目标文件。我一直在阅读 GNU Makefile 手册,但仍然不明白出了什么问题。
CC:= gcc
CCFLAGS:= -MMD -g -Wall
INCLUDE:= -I "../inc"
LDFLAGS:= -lcurses -lgdbm -lncurses -lgdbm_compat
SRC:= ../src
SOURCES:= $(wildcard $(SRC)/*.c)
OBJS:=$(patsubst $(SRC)/%.c,%.o,$(SOURCES))
all: $(OBJS)
$(OBJS): $(SOURCES)
$(CC) $(CCFLAGS) $(INCLUDE) -c $^
VPATH= ../$(PROG)
$(SOURCES):
$(CC) $(CC_FLAGS) $(INCLUDE) -c $<
.PHONY: clean
clean:
rm -f *.[od] *.o
-include *.d
如果需要,我可以发布另外两个 makefile。