gpt4 book ai didi

makefile - GNU Make 中的互斥量?

转载 作者:行者123 更新时间:2023-12-02 01:30:13 39 4
gpt4 key购买 nike

一个规则满足两个目标:

foo.o foo.h :
build_foo # this makes both foo.o and foo.h

后来,有些目标需要一个,有些则需要两个:

bar : foo.o
build_bar

baz : foo.h
build_baz

qux : bar baz
build qux

当使用 -jN 调用 make 时,如何防止配方运行两次?

最佳答案

我尽可能避免模式规则。在您的情况下,您会发现在运行配方后,foo.ofoo.h 之一比另一个更新(只需使用 $ ls - -全职他们)。

假设您的配方创建了 foo.h,然后继续创建 foo.o。这表明:

foo.o: foo.h ; # Empty recipe

foo.h: prereq1 prereq2 ...
build_foo

所以现在如果 foo.o 是另一个规则的先决条件,make 将首先构建 foo.h,创建 foo .o 作为副作用。然后它将运行foo.o 的配方。工作完成。

如果你感到不安,你可以添加一个简单的断言 foo.o 确实比 foo.h

更新
foo.o: foo.h
test $@ -nt $<

有关此主题的更多信息,请查看标题为 Handling Tools that Produce Many Outputs 的 automake(而非 make)章节

关于makefile - GNU Make 中的互斥量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34729605/

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