我正在自学 GNU Make,并认为查看 Redis Makefile 可以让我对这个工具了解一两件事。
源文件编译为目标文件的规则是here :
%.o: %.c .make-prerequisites
$(REDIS_CC) -c $<
请注意,后缀规则仅提到 C 源文件(带有 %.c)作为先决条件。
但是如果我在中间添加一个 echo 并运行 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.h
和 zmalloc.h
?
最佳答案
所讨论的先决条件来自 Makefile.dep
的第一行包含 makefile(包含在第 134 行)。
第 136 行的 dep
目标生成该文件。
这是使用编译器生成必要的头文件包含的相当常见(尽管完全可以避免)的步骤。我相信这个静态方法也存在条件 header 包含的问题。
澄清一下,其中“可避免”的部分是它根本不需要是单独的步骤和静态依赖文件。请参阅Advanced Auto-Dependency Generation有关此想法的详细信息。
关于c - Redis Makefile 如何包含头文件先决条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505063/