.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,你可以灵活地控制哪些文件类型会自动进行转换,以及它们之间的转换规则。

############################################################################# # Makefile for building: sample 2011-09-26 # # Project: # Template: # Command: # ------基本上简单用法的makefile------- #1. 第一个目标为最终目标 #2. 命令以 Tab开头,可以有多个命令 #3. 分行号\ 后面不可以跟空格 #4、加@可以去掉命令显示 #5. 变量为 abc = efd 访问为 $(abc) echo $abc # # # #缺点,单文件夹 #每次都会重新生成 # #foo.o : foo.c defs.h # foo模块 #cc -c -g foo.c # #多目录 一种方法,在主目录里面include "",然后其里面OBJS += .o,这样其实就是 或用foreach ############################################################################# #target EXECUTABLE := test CC := gcc CXX := g++ STRIP := strip AR := ar cqs LINK := g++ RM := rm -f CFLAGS := -g -Wall CXXFLAGS := $(CFLAGS) CXXFLAGS += -MD LIBS := -lm LIBPATH := -L/usr/local/lib INCPATH := ####### Output directory OBJSPATH := ../Obj/ EXECUTABLEPATH := ../Execute/ #######source Files SOURCE := $(wildcard *.c) $(wildcard *.cpp) OBJS := $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SOURCE))) DEPS := $(patsubst %.o,%.d,$(OBJS)) #######rule .SUFFIXES: .cpp .c .o .so .a .d $(OBJSPATH)%.o:%.c $(CC) $(CFLAGS) -c $< -o $@ $(OBJSPATH)%.o:%.cpp $(CXX) $(CXXFLAGS) -c $< -o $@ $(OBJSPATH)%.d:%.cpp $(CXX) -MM $ $@ ######main .PHONY : all deps objs clean rebuild all: $(EXECUTABLE) $(CXX) $(CXXFLAGS) $(INCLUDEPATH) $(LIBS) $(LIBPATH) $(addprefix $(OBJSPATH),$(OBJS)) \ -o $(EXECUTABLEPATH)$(EXECUTABLE) deps: $(addprefix $(OBJSPATH),$(DEPS)) objs: $(addprefix $(OBJSPATH),$(OBJS)) clean: @$(RM) $(OBJSPATH)*.o @$(RM) $(OBJSPATH)*.d @$(RM) $(EXECUTABLEPATH)$(EXECUTABLE) rebuild: clean all -include $(addprefix $(OBJSPATH),$(DEPS)) ##.d里面是详细的.o rule 自己会括展开的,然后没有文件就自己去重建 $(EXECUTABLE) : objs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值