这是我的 Makefile 的相关部分。
...
LIBS = gc ft
vpath %.a $(LIBS:%=lib%)
all:
$(MAKE) $(NAME)
$(NAME): $(LIBS:%=lib%.a) $(OBJS) | libs
$(CC) $(CFLAGS) $(OBJS) -o $(NAME) $(LDFLAGS)
-include $(DEPENDENCIES)
$(OBJS_DIR)/%.o: %.c $(OBJS_DIR)/debug$(DEBUG) | $(OBJS_DIR)
$(CC) $(CFLAGS) $(INCLUDES_DIR:%=-I %) -c $< -o $@
$(OBJS_DIR):
$(MKDIR) $@
libs: $(LIBS:%=lib%.a)
$(foreach LIB, ${LIBS}, ${MAKE} -C lib${LIB} ;)
lib%.a:
$(MAKE) -C $(@:%.a=%)
...
我的问题是,每当我触摸其中一个库中的文件时,都要重新编译该库,但我必须再次运行 make 以使其重新链接目标文件。
我究竟做错了什么 ?
提前致谢。
---编辑---
所以现在我的 Makefile 看起来像这样。
...
all: $(NAME)
$(NAME): $(OBJS) libft/libft.a libgc/libgc.a
$(CC) $(CFLAGS) $(OBJS) -o $(NAME) $(LDFLAGS)
-include $(DEPENDENCIES)
$(OBJS_DIR)/%.o: %.c $(OBJS_DIR)/debug$(DEBUG) | $(OBJS_DIR)
$(CC) $(CFLAGS) $(INCLUDES_DIR:%=-I %) -c $< -o $@
$(OBJS_DIR):
$(MKDIR) $@
libft/libft.a:
$(MAKE) -C libft
libgc/libgc.a:
$(MAKE) -C libgc
...
它不再重新链接,但如果更改我的库源中的某些文件,它也不会重新编译。