我有一个 Makefile,其中的目标具有关联的依赖项。所以我使用查找表,如:

APPS = a b c

dependency.lookup.a := x
dependency.lookup.b := y
dependency.lookup.c := z

$(APPS): %: path/$(dependency.lookup.%).datafile
    do something with $(dependency.lookup.$@)

这个makefile给了我错误。
*** 没有规则来制作目标“路径/.datafile”

限制条件:只有 MinGW。不能使用 shell/MSYS。也支持FreeBSD。

最佳答案

这需要使用 Secondary Expansion 功能:

.SECONDEXPANSION:
$(APPS): %: path/$$(dependency.loopup.$$*).datafile
    @echo "$@ depends on $^"

%.datafile : # Create one on demand for testing.
    mkdir -p ${@D}
    touch $@

输出:
mkdir -p path/
touch path/x.datafile
a depends on path/x.datafile

或者,使用常规依赖项:
a : path/x.datafile
b : path/y.datafile
c : path/z.datafile

$(APPS): % :
    @echo "$@ depends on $^"

前3行只添加依赖,规则单独指定。输出是一样的。

关于makefile - Makefile 目标依赖项中的变量替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43005281/

10-13 00:11