gpt4 book ai didi

makefile - 仅订单先决条件的多个隐式规则

转载 作者:行者123 更新时间:2023-12-04 20:36:44 25 4
gpt4 key购买 nike

我正在尝试制定一个仅限订单的先决条件,以确保在输出文件之前存在构建目录。根据GNU Make manual :

you may still declare multiple lines of prerequisites for the same target: they are appended appropriately (normal prerequisites are appended to the list of normal prerequisites; order-only prerequisites are appended to the list of order-only prerequisites).



所以我希望这应该有效:
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

最佳答案

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 $<

关于makefile - 仅订单先决条件的多个隐式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33810728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com