【发布时间】:2017-11-13 12:55:13
【问题描述】:
考虑一个很长的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
第一个选项比较麻烦,第二个选项很容易出错,以后我添加目标时忘记声明为PHONY。
是否有一种标准方法可以将makefile 中的所有目标声明为PHONY?
【问题讨论】:
-
如果 all 目标都是 PHONY,
make不是正确的工具,因为它与普通脚本相比没有任何优势... @ 987654331@ 将精确地制作命令行假冒给出的目标,如果您的目标都不依赖于其他目标,这将适用于您。 -
我同意菲利克斯的观点。而且我认为第二个版本比第一个版本更标准。我认为这不容易出错,您应该以某种方式控制 Makefile 中的内容,无论其大小如何。
-
我不同意 Felix 和 TimF。 Make 确实比“普通脚本”具有优势,因为您可以使用 make 来指定使用依赖项运行配方和外部脚本的顺序。您还可以使用 Makefile 作为一种干净的方式来存储和调用单个文件中的多个配方/脚本。这样,Makefile 本质上是一个命令目录,您可能不想一遍又一遍地键入。目标名称可以用作实际命令/脚本名称的别名。
-
@FelixPalmen 太没意义了,我一直都出于这个原因使用它。 Make 的语法比将参数传递给脚本要简单得多,然后必须通过 switch 语句的丑陋语法来解释。那么为什么不使用
.PHONY来达到它的目的呢? - 每次都会触发一个目标,无论它是否过时。关于 Make 的“整体思想”,你忘了提到“整体思想”的另一部分……依赖管理。就我而言,这就是为什么我更喜欢使用 Make 而不是在 shell 脚本中重写(和调试)依赖逻辑。 -
这是 Facebook 等公司按照我描述的方式使用 Makefile 的示例 => github.com/graphql-python/graphene/blob/master/docs/Makefile
标签: makefile phony-target