gpt4 book ai didi

makefile - 尝试不同方法来制作目标的标准 makefile 习语是什么

转载 作者:行者123 更新时间:2023-12-05 06:45:06 31 4
gpt4 key购买 nike

我有一个使用来自互联网的源文件的生成文件。该文件有两个位置,我认为这两个位置都不可靠,因此我还保留了一个本地副本。所以我的 makefile 的相关行如下所示:

src.c:
wget -nv http://location.com/$@ || wget -nv http://otherplace.com/$@ || cp local/$@ .

src.o: src.c
$(CC) -o $@ $<

这是执行此操作的“正确方法”吗?如果在创建目标的每种不同方式中有多个步骤怎么办 - 我如何告诉 make“尝试 A。如果 A 失败,请尝试 B。如果 B 失败,...”?

最佳答案

正确的做法是:

.PHONY: phony
src.c: phony
if (wget -nv http://location.com/$@ -O $@.temp) && ! diff $@.temp $@ >/dev/null; then \
mv $@.temp $@; \
fi

我将你的命令缩短为单个 wget 但你可以在那里放任何你想要的东西,包括一系列 || 来实现“试试这个,如果没有,尝试那个等等”。只要确保它输出到一个临时文件(并且不会无限期地挂起!)。

事实上在这里使用 phony 很重要,而不仅仅是 .PHONY。你能看出原因吗?

此外,使用此方法,不再需要保留另一个“本地”副本和/或使用 cp。您的目标 src.c 您的“本地副本” - 您能够从 Internet 成功获得的最新副本。

关于makefile - 尝试不同方法来制作目标的标准 makefile 习语是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154551/

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