2009-12-06 19 views
4

我想定义一个GNU make模式规则以及依赖于模式相关变量的规则。我想是这样的:如何在make模式规则的依赖关系中使用模式相关变量

%.exe : $(%_EXE_SOURCES) $(%_EXE_RESOURCES) 
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \ 
      -out:[email protected] $($*_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中完成,但也许有人有一个work-like make fragment?

回答

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:[email protected] $($*_EXE_SOURCES) $($*_EXE_RESOURCES) 

启用二次膨胀,使得在prerequesites列表使用自动变量(即$*在这种情况下),这是一件好事否则会工作。

+0

非常好。这看起来正是我所追求的。 – RAOF 2009-12-07 03:30:14