2

过去两次,GNU make 破坏了我的工作,因为它的一些内置规则将.c文件作为目标。

如果您有一个名为 的文件foo.c,还有一个foo.lLex 扫描器或foo.yYacc 解析器,请小心!GNU make 假定该.c文件是由这些文件制成的目标(这显然是 POSIX 要求!),它将执行类似mv y.tab.c foo.cor的操作lex -t foo.l > foo.c

在保留有用规则的同时禁用所有这些隐藏的、危险的规则(无论是已知的还是未知的)的方法是什么?

具体来说,我们如何向 GNU Make 提出这个请求:“请保留与(例如).c 和 .o 文件相关的所有规则,并禁用所有涉及任何其他文件类型的规则”?

4

1 回答 1

3

手册

许多预定义的隐式规则在 make 中作为后缀规则实现,因此将定义哪些取决于后缀列表......如果您修改后缀列表,唯一有效的预定义后缀规则将是由一两个命名的您指定的列表中的后缀;后缀未能在列表中的规则被禁用...如果您希望消除默认的已知后缀而不是仅仅添加它们,请为 .SUFFIXES 编写没有先决条件的规则。通过特殊安排,这消除了 .SUFFIXES 的所有现有先决条件。然后,您可以编写另一个规则来添加所需的后缀。

.SUFFIXES:            # Delete the default suffixes
.SUFFIXES: .c .o      # Define a new suffix list
于 2013-10-06T02:32:11.383 回答