gpt4 book ai didi

makefile - gnu make 模式规则匹配错误的规则

转载 作者:行者123 更新时间:2023-12-03 00:07:20 24 4
gpt4 key购买 nike

在下面的示例中,构建 all 时,目标 main-gs-universalk9-m.o 似乎与规则 1 匹配,而不是与规则 2 匹配。在 make 版本 3.81 中,我认为顺序很重要。即使我将规则 2 移到规则 1 之前定义。它仍然最终匹配规则 1

编码并使其按预期工作的正确方法是什么?

$(info .FEATURES := $(.FEATURES))


%.o:
@echo "Rule 1 $?"
rm -f $@
cp $*.c $@

main-gs-%-m.o: file1.o file2.o file3.o
@echo "Rule 2"
cat $? > $@

binos_%_version.o:
@echo "Rule 3"
echo "Hello World" > $@

x86-%-m: main-gs-%-m.o binos_%_version.o
@echo "Rule 4"
cat $? > $@

all: x86-universalk9-m

clean:
@echo "Rule Cleaning"
rm -f *.o
rm -f x86-universalk9-m

最佳答案

如果你看看implicit rule search algorithm是如何有效,您可以看到它分两个阶段执行。

在第一阶段,make 将删除任何具有既不实际存在也不“应该存在”的先决条件的规则。如果文件在 makefile 中明确提及为目标或非隐式规则的先决条件,则它们应该存在。

您的规则 main-gs-%-m.o: file1.o file2.o file3.o 具有三个先决条件,但由于它们不存在,因此未将它们指定为显式目标,并且它们仅作为隐式规则(即此规则和内置隐式规则)的先决条件出现,该规则已被删除,以支持 x86-universalk9-m%.o: .

有很多方法可以解决这个问题,尽管在不了解更多为什么需要使用所有这些模式规则的情况下很难给出确切的答案,将 %.o: 更改为 file1.o file2.o file3.o: 但是可以工作。

关于makefile - gnu make 模式规则匹配错误的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36193663/

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