我想在依赖于模式的变量中定义具有依赖关系的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片段?
您可以使用"二次扩展".这样的事情应该能达到你想要的效果:
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)
启用二级扩展允许$*
在预备列表中使用自动变量(即在这种情况下),否则将无效.