过去两次,GNU make已经破坏了我的工作,因为它的一些内置规则以.c
个文件为目标。
如果你有一个名为foo.c
的文件,还有一个foo.l
Lex扫描器或foo.y
Yacc解析器,请注意! GNU make假定.c
文件是由这些文件构成的目标(显然是POSIX要求!),它将执行mv y.tab.c foo.c
或lex -t foo.l > foo.c
之类的操作。
在保留有用规则的同时禁用所有隐藏的危险规则(无论是已知的还是未知的)的方法是什么?
具体来说,我们如何向GNU Make提出此请求:“请保留与(例如).c和.o文件相关的所有规则,并禁用涉及任何其他文件类型的所有规则”?
答案 0 :(得分:1)
来自the manual:
许多预定义的隐式规则都在make as中实现 后缀规则,那么将定义哪些取决于后缀列表 ... 如果修改后缀列表,则只有预定义的后缀规则 效果将是由打开的后缀中的一个或两个命名的效果 您指定的列表;后缀未在列表中的规则是 残疾... 如果您希望消除默认的已知后缀而不是仅仅 添加到它们,为没有先决条件的.SUFFIXES编写规则。通过 特殊的安排,这消除了所有现有的先决条件 .SUFFIXES。然后,您可以编写另一个规则来添加后缀 想。
.SUFFIXES: # Delete the default suffixes
.SUFFIXES: .c .o # Define a new suffix list