目标 .SUFFIX 在 Makefile 中有任何意义吗?

问题描述

在我遇到的 Makefile 中:

.SUFFIX: .c

这是 .SUFFIXES: .c 的拼写错误吗,因为我找不到任何关于 .SUFFIX 的信息。这有什么作用吗?

如果 Makefile 只使用模式规则,我什至需要在 Makefile 中闲逛吗?

解决方法

假设您使用的是 GNU make,除非确实存在名为 .SUFFIX 的用户目标,否则这可能是 .SUFFIXES: .c 的拼写错误。如果没有配方,您可以安全地将其删除:没有配方就毫无用处。

如果它是 .SUFFIXES: .c 并且它有一个配方,它将重新定义隐含规则:

%: %.c
    <recipe>

即:

LINK.c = $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)

%: %.c
    $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@