使用通配符创建符号链接的Makefile目标,使用目标字符串

4
我希望你能给我一组 makefile 规则,以在构建项目之前创建到多个代码模块之一的符号链接。make 目标的名称将决定符号链接指向的文件。例如:
  • 用户调用'make R3000'
  • Make 发现 'data.asm' 不存在,因此从 'data_R3000.asm' 创建一个符号链接到 'data.asm'。
  • 继续构建过程,使用 data.asm。
如何设置 make 规则以实现此功能?
2个回答

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 列为先决条件。

我正在寻找类似这样的东西。谢谢! - Colin

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只有一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接