2010-06-17 12 views
2

Je ne peux pas trouver un moyen de définir une règle de modèle générique pour le genre suivant de la production avec la marque:règle Makefile modèle générique - xyzzy-en_US.ext2 de xyzzy.ext0

nécessitent xyzzy-en_US.ext2 de xyzzy.ext0 via xyzzy.ext1.

Cela fonctionne:

all: xyzzy-en_US.ext2 
# to be compiled from xyzzy.ext0 

%.ext1 : %.ext0 
    # produce xyzzy.ext1 

%-en_US.ext2 : %.ext1 
    # produce xyzzy-en_US.ext2 

Mais comment généraliser la partie locale de la deuxième règle? Ou dois-je générer des règles pour tous les paramètres régionaux?

Aucune de ces travaux:

%-??_??.ext2 : %.ext1 
    # ... 

%.ext2 : $(@,%-??_??.ext2,%.ext1) 
    # ... 

Répondre

4

Il n'y a pas de bonne façon de le faire avec Make (manutention regex est élevé sur ma liste) mais voici une bidouille.

Vous pouvez avoir une règle distincte pour chaque locale qui fonctionnera avec n'importe quelle "chose" (xyzzy, ou peu importe). Mais puisque vous ne savez pas à l'avance à quelle région sera appelée, mais vous savez ce que les fichiers ext0 existent, il pourrait être préférable de faire une règle pour chaque "chose":

THINGS = $(basename $(wildcard *.ext0)) # xyzzy qrssr... 

define TEMPLATE 
$(1)-%.ext2: $(1).ext1 
    @echo produce [email protected] from $$^ using $$* 
endef 

$(foreach thing,$(THINGS),$(eval $(call TEMPLATE,$(thing))))