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

标签 c makefile redis

我正在自学 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.hzmalloc.h

最佳答案

所讨论的先决条件来自 Makefile.dep 的第一行包含 makefile(包含在第 134 行)。

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

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

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

关于c - Redis Makefile 如何包含头文件先决条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505063/

相关文章:

node.js - Redis从set中获取key,然后在multi中获取他们的数据

c - 使用异或在数组中重复和缺失的数字

Android.mk 在路径中通配额外的 'jni'?

c++ - 生成自动变灰的makefile - eclipse

c++ - sclite(SCTK) `make check`故障,C++/perl/Cygwin,可以安全使用Perl4的东西吗?

python - 在 Python-RQ 中减少机器上的 worker 数量?

python - Broken Pipe 错误 Redis

在C中将char数组转换为大写

C - System V - 删除共享内存段

c - 通过对套接字文件描述符的 ioctl 调用获取数据包时间戳