Makefile技巧:如何避免手动指定所有编译目标?
解决Makefile自动编译所有.s文件为.exe的问题
你之前用$(wildcard *.exe)失效的原因很直接:执行make时目标.exe文件还没生成,wildcard匹配不到任何内容,导致all目标只依赖clean,自然只会执行清理操作。
要实现自动编译所有.s文件,核心是先拿到所有.s源文件,再将它们转换为对应的.exe目标文件名,具体修改如下:
# 获取当前目录下所有.s源文件 SRCS := $(wildcard *.s) # 将每个.s文件名替换为对应的.exe目标文件名 EXES := $(patsubst %.s,%.exe,$(SRCS)) # all目标依赖clean和所有生成的.exe文件 all: clean $(EXES) clean: rm -f *.exe %.exe: %.s vasmm68k_mot -kick1hunks -Fhunkexe -o $@ -nosym $<
关键说明:
$(wildcard *.s):扫描当前目录,返回所有后缀为.s的文件列表$(patsubst %.s,%.exe,$(SRCS)):自动把所有.s文件名替换成对应的.exe文件名,无需手动维护目标列表- 修改后的
all目标会同时依赖clean和所有.exe文件,执行make all时会先清理旧的exe,再自动编译所有新增或修改的.s文件。
内容的提问来源于stack exchange,提问作者user20386317
相关产品推荐
相关产品推荐

