.SUFFIXES:
在 Makefile 中,.SUFFIXES:
是用于声明后缀规则的一个特殊变量,用来定义文件扩展名转换规则。它用于处理不同文件类型之间的自动转换,尤其是在没有显式规则的情况下。
作用:
-
.SUFFIXES:
清空当前 Makefile 中所有的后缀规则。这意味着 Makefile 不再默认处理常见的文件后缀转换(例如.c
转.o
或.f
转.o
)。 -
.SUFFIXES: .f90 .f .o
重新定义了一些后缀规则,允许从.f90
、.f
文件生成.o
文件。添加这些后缀的意义在于,Makefile 能够根据文件扩展名自动推导出编译规则。例如,可以自动从.f90
文件生成.o
文件,而不需要显式定义每个文件的规则。
使用场景:
通常,.SUFFIXES:
和后缀规则用于让 Makefile 自动识别文件类型,并在编译时自动处理不同类型文件的转换。清空 .SUFFIXES
列表并重新定义它,可以让开发者自定义哪些文件类型间可以自动转换,以及如何处理这些转换。
示例:
.SUFFIXES: # 清空默认的后缀规则
.SUFFIXES: .f90 .o # 定义新的后缀规则
.f90.o: # 定义从 .f90 到 .o 的转换规则
$(FC) $(FCFLAGS) -c $<
在这个例子中:
.SUFFIXES: .f90 .o
表示 Makefile 会根据这些后缀进行转换,遇到.f90
文件时,会自动尝试将其转换为.o
文件。- 这和手动列出所有文件的转换规则相比,减少了重复代码的书写工作,同时使 Makefile 更加简洁。
总结:
.SUFFIXES:
是一种简便的机制,用来定义不同文件后缀的自动转换规则。通过 .SUFFIXES
,你可以灵活地控制哪些文件类型会自动进行转换,以及它们之间的转换规则。