扩展Makefile通配符的依赖项的dirname

hen*_*dry 3 makefile

Build脚本到Makefile,它位于这个上游位置.我想将包含在此生成的HTML文档中的Javascript示例作为依赖项包含在内.

INFILES = $(shell find . -name "index.src.html")
OUTFILES = $(INFILES:.src.html=.html)
TEMP:= $(shell mktemp -u /tmp/specs.XXXXXX)

all: $(OUTFILES)

# Problem line:
%.html: %.src.html $(wildcard contacts/*js)
    @echo Dependencies: $^
    cd $(@D) && m4 -PEIinc index.src.html > $(TEMP)
    anolis --max-depth=3 $(TEMP) $@
    rm -f $(TEMP)

clean:
    rm -f $(OUTFILES)

PHONY: all clean
Run Code Online (Sandbox Code Playgroud)

我想$(wildcard contacts/*js)成为$(wildcard $(@D)/*js)或者$(wildcard $(dirname %)/*js),但我没有尝试过任何工作.必须有某种关键字来获取目标或依赖项的父目录,以便我可以引用javascript依赖项.

Eld*_*mov 5

AFAIK,在先决条件列表中使用$(@D)和其他自动变量只能使用GNU Make的二级扩展功能来实现.

因此,您的问题可能可以解决如下:

.SECONDEXPANSION:
%.html: %.src.html $$(wildcard $$(@D)/*js)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定它是否适用于模式规则.