我想在依赖于模式的变量中定义具有依赖关系的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片段?
答案 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)
启用辅助扩展允许在预设列表中使用自动变量(在这种情况下为$*
),否则 无法正常工作。