如何告诉 make 检查依赖文件中文件的时间戳?
how to tell make to check files' time stamps in dependency file?
考虑这个简单的规则:
foo.o: foo.c foo.d
gcc -c ...
foo.d: foo.c
gcc -M ...
现在,如果 foo.d 和 foo.o 都比 foo.c 更新 - foo.o 的配方将不会被执行。
然而,foo.c 中包含的 headers 之一可能已经改变,所以我确实需要 运行 的食谱。
所以问题是如何告诉 make 如果 foo.d 中列出的文件之一比 foo.o 新,那么它必须 运行 [=22= 的配方]?
谢谢。
依赖文件的意义不在于它们是目标先决条件,而是它们使用正确的依赖项完成您的目标。它们实际上需要包含在您的 Makefile 中。
这是一个基本示例:
SRC = foo.c main.c
OBJ = $(SRC:.c=.o)
DEPS = $(SRC:.c=.d)
-include $(DEPS)
all: myapp.o
myapp.o: foo.o main.o
gcc -c main.o foo.o -o myapp.o
main.o: main.c
gcc -M ...
foo.o: foo.c
gcc -M ...
.PHONY: all
现在发生的是 $(DEPS) 中每个文件的内容将被复制粘贴到您的 Makefile 中。由于 main.c
可能使用 foo.c
,因此包括 foo.h
,因此 main.d
看起来像这样:
main.o: \
foo.c \
foo.h
如果我们在 Makefile 中应用包含,这就是 GNU make 最终分析的内容:
SRC = foo.c main.c
OBJ = $(SRC:.c=.o)
DEPS = $(SRC:.c=.d)
-include $(DEPS)
all: myapp.o
myapp.o: foo.o main.o
gcc -c main.o foo.o -o myapp.o
main.o: main.c foo.c foo.h
gcc -M ...
foo.o: foo.c
gcc -M ...
.PHONY: all
观察 foo.c 和 foo.h 现在如何成为 main.o 的先决条件。这意味着如果其中任何一个发生变化,main.o 就必须重建。
考虑这个简单的规则:
foo.o: foo.c foo.d
gcc -c ...
foo.d: foo.c
gcc -M ...
现在,如果 foo.d 和 foo.o 都比 foo.c 更新 - foo.o 的配方将不会被执行。
然而,foo.c 中包含的 headers 之一可能已经改变,所以我确实需要 运行 的食谱。
所以问题是如何告诉 make 如果 foo.d 中列出的文件之一比 foo.o 新,那么它必须 运行 [=22= 的配方]?
谢谢。
依赖文件的意义不在于它们是目标先决条件,而是它们使用正确的依赖项完成您的目标。它们实际上需要包含在您的 Makefile 中。
这是一个基本示例:
SRC = foo.c main.c
OBJ = $(SRC:.c=.o)
DEPS = $(SRC:.c=.d)
-include $(DEPS)
all: myapp.o
myapp.o: foo.o main.o
gcc -c main.o foo.o -o myapp.o
main.o: main.c
gcc -M ...
foo.o: foo.c
gcc -M ...
.PHONY: all
现在发生的是 $(DEPS) 中每个文件的内容将被复制粘贴到您的 Makefile 中。由于 main.c
可能使用 foo.c
,因此包括 foo.h
,因此 main.d
看起来像这样:
main.o: \
foo.c \
foo.h
如果我们在 Makefile 中应用包含,这就是 GNU make 最终分析的内容:
SRC = foo.c main.c
OBJ = $(SRC:.c=.o)
DEPS = $(SRC:.c=.d)
-include $(DEPS)
all: myapp.o
myapp.o: foo.o main.o
gcc -c main.o foo.o -o myapp.o
main.o: main.c foo.c foo.h
gcc -M ...
foo.o: foo.c
gcc -M ...
.PHONY: all
观察 foo.c 和 foo.h 现在如何成为 main.o 的先决条件。这意味着如果其中任何一个发生变化,main.o 就必须重建。