Я пишу Makefile с большим количеством повторяющихся вещей, например,
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
там, где определена цель 'syst', определяется переменная 'UNAME' (и обычно это Linux, но может также Cygwin или OSF1) и переменные 'difort' и 'err_arch'. Этот блок кода используется очень много раз для разных целей компилятора (используя соглашение об именах ''). Поскольку это огромный объем избыточного кода, я бы хотел написать его более простым способом. Например, я хотел бы сделать что-то вроде этого:
debug_ifort_Linux:
compile(uname,compiler,flags,petsc_flags,target,lext)
, где compile может быть функцией, выполняющей приведенный выше код на основе аргументов. У кого-нибудь есть идеи, как мне это сделать?