我想要一组makefile规则,在构建项目之前为其中一个代码模块创建一个符号链接。 make目标的名称将确定符号链接指向的文件。例如:
如何设置make规则来执行此操作?
答案 0 :(得分:4)
可能是这样的:
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
被列为相应规则中的先决条件。
答案 1 :(得分:0)
我会做这样的事情:
.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也是一个元素。