Redis Makefile如何包含头文件先决条件

时间:2014-12-16 12:49:32

标签: c makefile redis

我在教自己GNU Make,并想看看Redis Makefile会教我一两个关于这个工具的东西。

将源文件编译为目标文件的规则是here

%.o: %.c .make-prerequisites
  $(REDIS_CC) -c $<

请注意,后缀规则只是提到C源文件(带有%.c)作为先决条件。

但如果我在中间添加一个回声并运行make:

%.o: %.c .make-prerequisites
  echo $^
  $(REDIS_CC) -c $<

然后make的输出的前几行如下所示:

cd src && make all
make[1]: Entering directory `/home/cltpadmin/code/redis/src'
echo adlist.c .make-prerequisites adlist.h zmalloc.h
adlist.c .make-prerequisites adlist.h zmalloc.h
CC adlist.o

make如何知道adlist.c取决于adlist.hzmalloc.h

1 个答案:

答案 0 :(得分:2)

有问题的先决条件来自Makefile.dep包含的makefile第一行(包含在第134行)。

第136行的dep目标生成该文件。

使用编译器生成必要的头文件包含这是一个相当普遍(尽管完全可以避免)的步骤。我认为这种静态方法也存在条件头问题。

为了澄清,“可避免”部分是它根本不需要是一个单独的步骤和一个静态依赖文件。有关此想法的详细信息,请参阅Advanced Auto-Dependency Generation