Makefile目标依赖项中的变量替换

Moh*_*zim 3 makefile gnu-make

我有一个包含相关依赖项的目标的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.$@)
Run Code Online (Sandbox Code Playgroud)

这个makefile给了我错误.***没有规则来制作目标'path/.datafile'

约束:只有MinGW.不能使用shell/MSYS.也支持FreeBSD.

Max*_*kin 6

这需要使用辅助扩展功能:

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

%.datafile : # Create one on demand for testing.
    mkdir -p ${@D}
    touch $@
Run Code Online (Sandbox Code Playgroud)

输出:

mkdir -p path/
touch path/x.datafile
a depends on path/x.datafile
Run Code Online (Sandbox Code Playgroud)

或者,使用常规依赖项:

a : path/x.datafile
b : path/y.datafile
c : path/z.datafile

$(APPS): % :
    @echo "$@ depends on $^"
Run Code Online (Sandbox Code Playgroud)

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