A abordagem de Yaegashi funcionará, mas não será fácil dar valores imediatos. O comando 'export' é avaliado enquanto o Makefile está sendo analisado e define uma variável de ambiente do shell para a receita. Em seguida, a variável de ambiente é avaliada durante a execução da receita 'docs'.
Se o seu snippet precisar ter alguma variável dependente de alvo preenchida, eu recomendaria uma abordagem como essa:
Aproximação rápida
Se você precisar executar apenas algumas linhas, esse padrão funcionará muito bem.
run_script = python -c \
"import time ;\
print 'Hello world!' ;\
print '%d + %d = %d' %($1,$2,$1+$2) ;\
print 'Running target \'%s\' at time %s' %('$3', time.ctime())"
test:
$(call run_script,4,3,$@)
Abordagem de fantasia
Se você quiser usar caracteres e funções estranhas, for-loops ou outras construções de várias linhas, aqui está um padrão sofisticado que funcionará lindamente.
#--------------------------- Python Script Runner ----------------------------#
define \n
endef
escape_shellstring = \
$(subst ',\',\
$(subst ",\",\
$(subst $$,\$$,\
$(subst \,\,\
$1))))
escape_printf = \
$(subst \,\,\
$(subst %,%%,\
$1))
create_string = \
$(subst $(\n),\n,\
$(call escape_shellstring,\
$(call escape_printf,\
$1)))
python_script = printf "$(call create_string,$($(1)))" | python
#------------------------------- User Scripts --------------------------------#
define my_script
def good_times():
print "good times!"
import time
print 'Hello world!'
print '%d + %d = %d' %($2,$3,$2+$3)
print 'Runni'ng $$BEEF \ttarget \t\n\n"%s" at time %s' %('$4', time.ctime())
good_times()
endef
#--------------------------------- Recipes -----------------------------------#
test:
$(call python_script,my_script,1,2,$@)