进行:目标选择

时间:2018-12-04 15:50:36

标签: makefile gnu-make

我是新来的。我尝试运行示例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文件进行构建,对吧?

1 个答案:

答案 0 :(得分:0)

那是pattern rule,而不是目标。它没有指定特定的目标文件名,而只是指定了在有需要的情况下如何产生//contentBody/*/row="0"/class="l0 r0"文件(使用shell通配符表示法)的规则。

您可能应该将*.o规则移到hellomake之前(为了便于阅读,它也可能早于模式规则)。

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