如何管理C头文件依赖?

时间:2012-03-07 09:15:03

标签: makefile gnu-make

我有很多C文件,有些有头文件(.h),有些文件没有。

这是我的makefile:

.SUFFIXES: 

SRC := $(wildard ./src/*.c)
OBJ := $(SRC:%.c=%.o)

all: $(OBJ)

%.o: %.c
    $(MyNotGCCCompiler) "@../$(*F).cmd"

它工作正常,但是如果我更改头文件,则不会重新编译目标,因为它不包含在依赖项中。

我该如何管理此案例?

由于

2 个答案:

答案 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);如果您无法使用或构建此类工具,则需要自行维护这些规则。