我有以下条目的makefile。第一条规则是否取决于secon规则?那么它从第二个文件构建所有.o文件?
all:$(PROG)
$(PROG): *.o
$(LD) -o $(PROG) -c $< $(LFLAGS)
%.o : %.c
$(CC) $(CFLAGS) -o $@ -c $<
具体来说,如果我调用'make all',如果没有找到* .o文件,它会调用第二条规则吗? 所有其他变量都有通常的含义。
答案 0 :(得分:0)
不,那不行。当您第一次运行makefile时,是否有.o
个文件?不。所以表达式*.o
将扩展为空。
当然,$(PROG)
的配方实际上并没有像编写的那样使用任何目标文件。
你可以做这样的事情(虽然我个人更喜欢简单地手动列出文件;创建所有新文件并不常见,所以它不是很费力,而且比仅仅尝试获取文件中的每个文件更安全目录):
SOURCES := $(wildcard *.c)
OBJECTS := $(SOURCES:%.c=%.o)
$(PROG): $(OBJECTS)