【发布时间】:2014-09-18 21:02:20
【问题描述】:
我有一个来自示例项目的 makefile,不幸的是,当项目中的任何单个文件发生更改时,它会强制重新构建。我对makefile没有很多经验,所以我不知道如何解决这个问题。
makefile 将要编译的文件定义为单个变量SRCS,如下所示。当然,这个列表中有大约 40 个文件,分布在很多不同的目录中。
SRCS = \
../../src/file1.c \
../../src/file2.c
然后它为每个.o 文件定义每个.c 文件生成的构建规则。
$(OBJ_PATH)/%.o: $(SRCS)
$(CC) $(FLAGS) $(filter %/$(subst .o,.c,$(notdir $@)), $(SRCS)) -o $@
根据使用 -d 选项的 make run,当单个 .c 文件发生更改时,必须重新编译所有目标文件,因为 $(SRCS) 被定义为上面的依赖项。
如果单个文件更改只有 1 .o 文件必须重新编译,我该如何更改?
【问题讨论】:
-
那么,我们的目标是将给定的源代码树扁平化为包含目标文件的单个输出目录(暗示文件名不能重复使用)?