如何在make模式规则中的依赖项中使用依赖于模式的变量

RAO*_*AOF 4 makefile gnu-make

我想在依赖于模式的变量中定义具有依赖关系的GNU make模式规则.我想要的是这样的:

%.exe : $(%_EXE_SOURCES) $(%_EXE_RESOURCES)
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \
            -out:$@ $($*_EXE_SOURCES) $($*_EXE_RESOURCES)
Run Code Online (Sandbox Code Playgroud)

并在以后定义类似的东西

FOO_EXE_SOURCES = src/Foo.cs
all: Foo.exe
Run Code Online (Sandbox Code Playgroud)

提出的规则有助于建立; 在规则的主体中,$($*_EXE_SOURCES)变量被扩展为$(FOO_EXE_SOURCES),扩展为src/Foo.cs.但是,依赖关系不能正确扩展; 更改src/Foo.cs不会导致重建Foo.exe.

我怀疑这实际上不能在make中完成,但也许有人有一个类似工作的make片段?

Dan*_*ing 8

您可以使用"二次扩展".这样的事情应该能达到你想要的效果:

Foo_EXE_SOURCES := foo.cs bar.cs baz.cs
all: Foo.exe

.SECONDEXPANSION:
%.exe: $$($$*_EXE_SOURCES)
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \
            -out:$@ $($*_EXE_SOURCES) $($*_EXE_RESOURCES)
Run Code Online (Sandbox Code Playgroud)

启用二级扩展允许$*在预备列表中使用自动变量(即在这种情况下),否则将无效.