【发布时间】:2020-12-29 16:29:37
【问题描述】:
拥有这个简单的makefile:
VPATH = include
CC := gcc
CFLAGS := -I include -Wall -pedantic
%: %.o include.o
$(CC) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
当我使用程序名称触发它时(与带有 .c 扩展名的源名称相同),我希望触发第一条规则(因为我只提供了一个名称 没有 扩展名) 和第二个,因为对于第一个规则,有%.o 先决条件,这正是第二个规则。
在 pwd 中有这些文件:
client.c include makefile server6.c server.c
现在如果我让make server:
会的
gcc -I include -Wall -pedantic server.c -o server
也就是说,第二条规则没有被触发。即使目标文件在第一条规则中作为先决条件,也没有制作目标文件的步骤。那怎么可能呢? make 只是忽略了先决条件,并尝试仅使用第一条规则进行制作。如何解决?
【问题讨论】: