Makefile 使用通配符生成文件目标,以使用目标字符串创建符号链接
我想要一组makefile规则,在构建项目之前创建到几个代码模块之一的符号链接。生成目标的名称将确定符号链接指向的文件。例如:Makefile 使用通配符生成文件目标,以使用目标字符串创建符号链接,makefile,wildcard,Makefile,Wildcard,我想要一组makefile规则,在构建项目之前创建到几个代码模块之一的符号链接。生成目标的名称将确定符号链接指向的文件。例如: 用户调用“make R3000” Make看到“data.asm”还不存在,因此创建了从“data_R3000.asm”到“data.asm”的符号链接 使用data.asm继续构建过程 我如何设置并制定规则来执行此操作?可能类似于: MODULES := $(patsubst data_%.asm,%,$(wildcard data_*.asm)) all:
- 用户调用“make R3000”
- Make看到“data.asm”还不存在,因此创建了从“data_R3000.asm”到“data.asm”的符号链接
- 使用data.asm继续构建过程
MODULES := $(patsubst data_%.asm,%,$(wildcard data_*.asm))
all:
...
data.asm:
[ -n "$(filter $(MAKECMDGOALS),$(MODULES))" ] || { echo unknown module: $(MAKECMDGOALS) ; exit 1; }
ln -s $(filter $(MAKECMDGOALS),$(MODULES)) $@
然后确保
data.asm
被列为相应规则中的先决条件。我会这样做:
.PHONY mklink
mklink:
test -e data_$(MAKECMDGOALS).asm || exit 1
ln -s data_$(MAKECMDGOALS).asm data.asm
然后使所有(和其他目标)依赖于mklink。您不应该将data.asm作为规则中的目标的原因是,如果您运行
make R3000
,则将创建data.asm,然后如果您运行make L2000
,data.asm文件将指向错误的目录,并且不会被覆盖(我假设这不是您想要的)。测试行检查链接目标是否存在,如果不存在,则以1退出,导致目标失败。您还应该添加一个检查,确保MAKECMDGOALS也是一个元素。类似这样的内容正是我要寻找的。非常感谢。