我有很多C文件,有些有头文件(.h),有些文件没有。
这是我的makefile:
.SUFFIXES:
SRC := $(wildard ./src/*.c)
OBJ := $(SRC:%.c=%.o)
all: $(OBJ)
%.o: %.c
$(MyNotGCCCompiler) "@../$(*F).cmd"
它工作正常,但是如果我更改头文件,则不会重新编译目标,因为它不包含在依赖项中。
我该如何管理此案例?
由于
答案 0 :(得分:2)
标准方法是在编译时自动生成标头依赖项。
对于第一次编译,由于必须编译每个源文件,因此不需要依赖项。后续的重新编译会加载先前编译生成的依赖关系,以确定需要重新编译的内容。
您的$(MyNotGCCCompiler)
可能有一个命令行选项来生成依赖项文件。
使用gcc
时,它的工作方式如下:
.SUFFIXES:
SRC := $(wildard ./src/*.c)
OBJ := $(SRC:%.c=%.o)
DEP := $(OBJ:%.o=%.d)
all: $(OBJ)
# when compiling produce a .d file as well
%.o: %.c
gcc -c -o $@ $(CPPFLAGS) $(CFLAGS) -MD -MP -MF ${@:.o=.d} $<
# don't fail on missing .d files
# there won't be any on the first run
-include $(DEP)
答案 1 :(得分:0)
(我不确定这是不是说明显的,但无论如何:)
添加规则以明确地列出这些依赖项,逐个文件。 最好是在主文件中包含的单独的makefile中。
存在可以为您生成它们的工具(例如gcc
);如果您无法使用或构建此类工具,则需要自行维护这些规则。