【发布时间】:2015-05-09 07:09:27
【问题描述】:
这是我的整个 Makefile:
TGT = call
OBJS = main.o
.PHONY : clean
$(TGT) : $(OBJS)
$(CC) -o $@ $^
%.o : %.s
$(AS) -o $@ $<
%.s : %.c
$(CC) -S -o $@ $<
clean :
$(RM) $(TGT) *.o *.s
当我运行 make 时,我期待:
- main.s 是从 main.c 构建的
- main.o 从 main.s 构建
- 调用是从 main.o 构建的
相反,make 正在做的是:
$ make
cc -c -o main.o main.c
cc -o call main.o
任何想法为什么它使用 *.o 文件的隐式规则而不是我指定的显式规则?请注意,如果我先手动创建 *.s 文件,它会使用我的显式规则:
$ make main.s
cc -S -o main.s main.c
$ make
as -o main.o main.s
cc -o call main.o
我只是从根本上误解了 Make 的一些东西吗?是不是应该承认main.s是main.o的先决条件,使用我指定的规则构建main.s?
【问题讨论】: