gpt4 book ai didi

makefile - 声明所有目标 PHONY

转载 作者:行者123 更新时间:2023-12-03 07:35:22 28 4
gpt4 key购买 nike

考虑一个长 makefile目标众多,都是 PHONY (意味着目标名称不代表现有文件)。

我可以这样做:

.PHONY: a
a:
do someting a

.PHONY: b
b:
do someting b

.PHONY: c
c:
do someting c

或者:
.PHONY: a b c
a:
do someting a

b:
do someting b

c:
do someting c

第一个选项比较麻烦,第二个选项容易出错,以后我加一个target忘记声明为 PHONY .

是否有一种标准方法可以在 makefile 中声明所有目标?如 PHONY ?

最佳答案

如果真的全部 目标是 PHONY,这有点毫无意义。 make是为了“做必要的事情来更新我的输出”,如果答案是必要的?总是一样的,简单的脚本可以用更少的开销完成同样的工作。

话虽如此,我可以想象这样一种情况,即所有打算在命令行中给出的目标都应该是 PHONY——假设您想构建一些这样的文档:

all: doc1.pdf doc2.pdf doc3.pdf doc4.pdf doc5.pdf

manuals: doc3.pdf doc4.pdf

faqs: doc1.pdf

designdocs: doc2.pdf

apidocs: doc5.pdf

developerdocs: doc2.pdf doc5.pdf

userdocs: doc1.pdf doc3.pdf doc4.pdf

%.pdf: %.md
$(somedocgenerator) -o $@ $<

那么你可以执行以下操作:
.PHONY: all $(MAKECMDGOALS)

这将动态生成在命令行中给出的任何目标 PHONY。请注意,您必须在此处包含您的默认目标,因为只需键入 make 即可在不明确指定的情况下调用该目标。 .

我不推荐这种方法,因为它有两个缺点:
  • 它对 make 的不同风格的便携性较差.
  • 如果有人决定 make,那将是行为不端像这里这样的特定输出文件 make doc3.pdf .
  • 如果您决定让您的一个 PHONY 目标依赖于另一个 PHONY 目标,它也会出现错误行为。

  • 因此,最好采用一行声明所有 PHONY 目标的方法。如果您的 Makefile真的很大,你可以把它分成几个文件并使用 include -- 有一个 .PHONY:每个文件中的一行。

    关于makefile - 声明所有目标 PHONY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44492805/

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