2009-12-06 1 views
4

Я хотел бы определить правило шаблона GNU с зависимостями в зависящей от шаблона переменной. То, что я хотел бы что-то вроде этого:Как использовать зависящие от шаблона переменные в зависимостях в правилах 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, но, возможно, у кого-то есть произведение, подобное фрагменту?

ответ

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

Смежные вопросы