我很难想出一个生成文件规则来拥有几个可执行文件,每个可执行文件都依赖于其各自的源文件。有一个共同的库,每个程序都有一个源文件: a.c
编译并与库链接产生可执行文件a
等。
LIB_C_FILES = f1.c f2.c f3.c
LIB_H_FILES = f1.h f2.h f3.h
TARGETS = a b c
CFLAGS = -g -O0 -DDEBUG
.PHONY : all clean
.c.o:
g++ -c $(CFLAGS) -o $@ $<
all: $(TARGETS)
${TARGETS} : lib.a ${@:%=%.c}
g++ $(CFLAGS) ${@:=.c} -o $@ lib.a
lib.a: ${LIB_C_FILES:.c=.o} $(LIB_H_FILES)
ar r $@ $?
图书馆部分工作正常。当可执行文件不存在时,它也可以正常工作。但是当一个独立的源文件被修改时,它会说make: Nothing to be done for 'all'.
我不明白使目标在列表中单独a
依赖源的正确方法。a.c
我错过了什么?