2009-12-06 10 views
4

Je voudrais définir une règle de modèle make GNU avec les dépendances dans une variable dépendante du modèle. Ce que je voudrais quelque chose comme ceci:Comment utiliser les variables dépendantes du modèle dans les dépendances dans les règles de modèle make

%.exe : $(%_EXE_SOURCES) $(%_EXE_RESOURCES) 
    $(CSC_V)$(CSC) $(CSCFLAGS) $($*_EXE_CSCFLAGS) -target:exe \ 
      -out:[email protected] $($*_EXE_SOURCES) $($*_EXE_RESOURCES) 

Et pour définir plus tard quelque chose comme

FOO_EXE_SOURCES = src/Foo.cs 
all: Foo.exe 

La règle a présenté les travaux de construction; Dans le corps de la règle, la variable $($*_EXE_SOURCES) est étendue à $(FOO_EXE_SOURCES), qui s'étend à src/Foo.cs. Les dépendances ne se développent pas correctement, cependant; changer src/Foo.cs ne provoque pas la reconstruction de Foo.exe.

Je suppose que cela ne peut pas être fait dans make, mais peut-être quelqu'un a-t-il un fragment de travail?

Répondre

8

Vous pouvez utiliser "expansion secondaire". Quelque chose comme cela devrait accomplir ce que vous cherchez:

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) 

Activation expansion secondaire permet l'utilisation de variables automatiques (à savoir $* dans ce cas) dans la liste Prérequis, qui est quelque chose qui autrement pas travail.

+0

Excellent. On dirait que c'est exactement ce que je cherche. – RAOF

Questions connexes