Fonctions dans le Makefile
Je suis en train d'écrire un Makefile avec beaucoup de trucs répétitifs, par exemple
debug_ifort_Linux:
if [ $(UNAME) = Linux ]; then \
$(MAKE) FC=ifort FFLAGS=$(difort) PETSC_FFLAGS="..." \
TARGET=$@ LEXT="ifort_$(UNAME)" -e syst; \
else \
echo $(err_arch); \
exit 1; \
fi
où la cible 'syst' est défini, la variable 'UNAME' est défini (et est généralement de Linux, mais aussi par Cygwin ou OSF1) et les variables 'difort" et "err_arch" sont également définis. Ce bloc de code est utilisé plusieurs fois pour différents compilateur cibles (à l'aide d'un nom de convention de"'). Puisque c'est une énorme quantité de code redondant, j'aimerais être capable d'écrire de la plus simple manière. E. g., Je voudrais faire quelque chose comme ceci:
debug_ifort_Linux:
compile(uname,compiler,flags,petsc_flags,target,lext)
où compiler pourrait être une fonction de code ci-dessus en fonction sur les arguments. Quelqu'un aurait-il une idée de comment je pourrais y arriver?
Vous devez vous connecter pour publier un commentaire.
Il y a 3 concepts associés:
appel
functionLa refonte du résultat pourrait ressembler à ceci:
Que l'on
\
qui est à gauche est de continuer à$(MAKE)
ligne pour le shell.Pas de multi-ligne variable est nécessaire ici, parce que c'est juste une ligne de code carapace.
Multi-variables en ligne ne sont utilisées que dans le bloc else.
Si vous n'avez pas besoin de paramètres que vous pouvez utiliser : affectation= et étendre la méthode avec
$(compile)
(voir conserves de recettes)[Modifier] Remarque: faire à l'Aide de versions antérieures à la version 3.82, l' = n'a pas été reconnu à la fin de l'instruction define pour moi. J'ai corrigé cela en utilisant
define compile
à la place.Vous êtes à la recherche pour le
appel
function.Si vous pouvez restructurer votre
Makefile
un peu, cependant, vous devriez voir si vous pouvez utilisermake
's conditions au lieu desh
's.