2009-12-06 20 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