如何通过Makefile将目标文件输出到指定目录并单独编译
实现方法
你可以通过修改Makefile的规则和变量定义,实现单个文件编译并输出到指定目录的需求,修改后的Makefile如下:
FORTRAN = ifort -c PATH_MOD = mod/ PATH_OBJ = lnk/ FILE_MOD = mod_constant.f90 mod_rot.f mod_test.f90 # 拼接完整的源文件路径 SOURCE_FILES = $(addprefix $(PATH_MOD), $(FILE_MOD)) # 生成目标文件的完整路径(输出到lnk目录) OBJECT_FILES = $(addprefix $(PATH_OBJ), $(FILE_MOD:%.f*=%.o)) # 默认目标:编译所有目标文件 all: $(OBJECT_FILES) # 模式规则:单独编译每个源文件到lnk目录 $(PATH_OBJ)%.o: $(PATH_MOD)%.f* $(FORTRAN) $< -o $@ clean: rm -f $(PATH_OBJ)*.o
关键说明:
addprefix函数用来给文件名批量添加目录前缀,避免手动拼接路径出错- 模式规则
$(PATH_OBJ)%.o: $(PATH_MOD)%.f*会匹配所有.f/.f90后缀的源文件,自动生成对应的lnk/xxx.o目标 - 自动变量
$<代表当前规则的依赖文件(即单个源文件),$@代表当前规则的目标文件,这样就能实现每个源文件单独编译并输出到指定目录 - 新增的
all目标作为默认执行入口,执行make时会自动编译所有目标文件
内容的提问来源于stack exchange,提问作者user5759106
相关产品推荐
相关产品推荐

