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

时间:2009-12-06 23:22:18

标签: makefile gnu-make

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

%.exe : $(%_EXE_SOURCES) $(%_EXE_RESOURCES)
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \
            -out:$@ $($*_EXE_SOURCES) $($*_EXE_RESOURCES)

稍后定义类似

的内容
FOO_EXE_SOURCES = src/Foo.cs
all: Foo.exe

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

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

1 个答案:

答案 0 :(得分: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)

启用辅助扩展允许在预设列表中使用自动变量(在这种情况下为$*),否则 无法正常工作。