gpt4 book ai didi

makefile - 如何强制Make始终执行配方

转载 作者:行者123 更新时间:2023-12-04 22:30:55 28 4
gpt4 key购买 nike

当前的Makefile具有以下内容:

target1 : lib1.a  lib2.a

target2 : lib1.a lib3.a

target3 : lib3.a

lib1.a:
$(MAKE) -C sub_dir all

我想更改此Makefile,以便无论目标依赖 lib1.a的位置如何,它始终始终运行命令“ $(MAKE) -C sub_dir all”。换句话说,在上面的示例中,target1和target2将始终运行“ $(MAKE) -C sub_dir all”。有什么办法可以做到吗?

我知道以下内容不起作用:
target1 :  lib2.a
$(MAKE) -C sub_dir all

target2 : lib3.a
$(MAKE) -C sub_dir all

target3 : lib3.a

因为如果lib2.a没有更新,则该命令不会运行。我有一个限制,我只能控制lib1.a,不能更改lib2.a的构建方式。

任何帮助表示赞赏!

UPDATE :我使用以下解决方案:
target1 : lib1.a  lib2.a

target2 : lib1.a lib3.a

target3 : lib3.a

lib1.a: relay

.PHONY: relay
relay:
$(MAKE) -C sub_dir all

GNU Make help表示FORCE不如.PHONY有效,但是从您的解释来看,FORCE似乎更好。我会误会吗?

最佳答案

我认为 Force Target 是您在这里寻找的。

lib1.a: FORCE
$(MAKE) -C sub_dir all

FORCE: ;

.PHONY规则(如@MadScientist here所建议的)相比,这本身并不会强制所有依赖 lib1.a的目标始终重建。仅当 lib1.a实际更改时,它才会这样做。

更好的解决方案可能会完全摆脱子make,并且实际上使 lib1.a的依赖项信息可用于此makefile(直接或通过 sub_dir中包含的makefile),因为这样可以避免整个“强制执行此食谱,因为我不会告诉您如何判断目标是否需要更新”问题。

关于makefile - 如何强制Make始终执行配方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226106/

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