我正在尝试制作一个仅订单的先决条件,以确保在输出文件之前存在构建目录。根据{{3}}:
您仍然可以为同一目标声明多行先决条件:它们会被适当地附加(正常的先决条件会附加到正常先决条件列表中;仅限订单的先决条件会附加到仅限订单的先决条件列表中)。
所以我希望这应该有效:
BUILDDIR:=build
all: $(BUILDDIR)/test.o
clean:
rm -rf $(BUILDDIR)
$(BUILDDIR):
mkdir -p $(@)
$(BUILDDIR)/%.o: | $(BUILDDIR)
$(BUILDDIR)/%.o: %.c
gcc -o $@ -c $<
但它没有,无法创建目录。但是,当我将规则放在一行时,它确实有效:
$(BUILDDIR)/%.o: %.c | $(BUILDDIR)
在这个简单的例子中,它并不重要,但我需要为我更复杂的makefile制作这样的多个先决条件列表,并且手册使它听起来应该有效。我怎么能做到这一点?
如果重要:
$ make -v
GNU Make 3.81
答案 0 :(得分:3)
在implicit rule search期间删除了没有配方的隐式规则,其唯一目的是cancel任何先前定义的相同规则。这意味着行$(BUILDDIR)/%.o: | $(BUILDDIR)
基本上没有效果。
由于您已经有一个先决条件列表,您可以使用常规和静态模式规则:
BUILDDIR := build
OBJS := $(BUILDDIR)/test.o
all: $(OBJS)
clean:
$(RM) -r $(BUILDDIR)
$(BUILDDIR):
mkdir -p $@
$(OBJS): | $(BUILDDIR)
$(OBJS): $(BUILDDIR)/%.o: %.c
$(CC) -o $@ -c $<