我是新来的。我尝试运行示例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
按照制造商手册的说法,默认情况下,制造商从第一个目标开始(而不是名称以“。”开头的目标)。因此,在这种情况下,第一个目标是%.o: %c
,对吗?为什么它不首先运行该规则?我的目录中没有目标文件。 make必须检查是否缺少目标文件,并尝试使用第一条规则使用C文件进行构建,对吧?
答案 0 :(得分:0)
那是pattern rule,而不是目标。它没有指定特定的目标文件名,而只是指定了在有需要的情况下如何产生//contentBody/*/row="0"/class="l0 r0"
文件(使用shell通配符表示法)的规则。
您可能应该将*.o
规则移到hellomake
之前(为了便于阅读,它也可能早于模式规则)。
如果您希望将所有这些test
选项应用于所有$(CC)
文件,只需将它们添加到*.c
。那么就没有必要真正覆盖CFLAGS
的内置模式规则。