Makefile 如何在生成模式规则的依赖项中使用模式依赖变量
我想用模式依赖变量中的依赖项来定义GNU make模式规则。我想要的是这样的:Makefile 如何在生成模式规则的依赖项中使用模式依赖变量,makefile,gnu-make,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: Fo
%.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
规则提出了建设工程;在规则主体中,$($*\u EXE\u SOURCES)
变量扩展为$(FOO\u EXE\u 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)
启用二次扩展允许在prerequesites列表中使用自动变量(即在本例中为$*),否则将无法使用。非常好。看来这正是我想要的。