Make:目标选择



我是新手。我试着运行示例制作,如下所示。

CC=gcc
CFLAGS=-I.
OBJ = hellofunc.o hellomake.o
SRC = hellofunc.c hellomake.c
DEPS := $(OBJ:.o=.d)
%.o: %.c
$(CC) -MT $@ -MMD -MP -MF $(patsubst %,%.d,$(basename $@)) -o $@ -c $(CFLAGS) $<
test:
@echo "inside test target"
hellomake: hellomake.o hellofunc.o
$(CC) -o $@ $^

include $(DEPS)

输出:

inside test target

根据make手册,默认情况下,make以第一个目标(而不是名称以'.'开头的目标(开始。所以在这种情况下,第一个目标是%.o: %c,对吧?为什么它不先运行该规则?我的目录中没有对象文件。make必须检查是否缺少对象文件,并尝试使用第一条规则使用C文件进行构建,对吧?

这是一个模式规则,而不是目标。它没有指定特定的目标文件名,只是一个关于如何生成*.o文件的规则(使用shell通配符表示法(,如果在某种情况下需要这样做的话。

您可能应该移动hellomake规则,使其位于test之前(为了便于阅读,也可能位于模式规则之前(。

如果要将所有这些$(CC)选项应用于所有*.c文件,只需将它们添加到CFLAGS即可。那么就没有必要真正重写make的内置模式规则。

最新更新