GNU Make:禁用除所需内容之外的所有内置规则

时间:2013-10-06 02:23:45

标签: gnu-make

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

如果你有一个名为foo.c的文件,还有一个foo.l Lex扫描器或foo.y Yacc解析器,请注意! GNU make假定.c文件是由这些文件构成的目标(显然是POSIX要求!),它将执行mv y.tab.c foo.clex -t foo.l > foo.c之类的操作。

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

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

1 个答案:

答案 0 :(得分:1)

来自the manual

  

许多预定义的隐式规则都在make as中实现   后缀规则,那么将定义哪些取决于后缀列表 ...    如果修改后缀列表,则只有预定义的后缀规则   效果将是由打开的后缀中的一个或两个命名的效果   您指定的列表;后缀未在列表中的规则是   残疾...   如果您希望消除默认的已知后缀而不是仅仅   添加到它们,为没有先决条件的.SUFFIXES编写规则。通过   特殊的安排,这消除了所有现有的先决条件   .SUFFIXES。然后,您可以编写另一个规则来添加后缀   想。

.SUFFIXES:            # Delete the default suffixes
.SUFFIXES: .c .o      # Define a new suffix list