Você não especifica como FILE_VAR é usado, mas se eu tentar $(eval $(FILE_VAR)) , o problema é que cat não faz o que você quer fora de uma regra. Envolvê-lo em $(shell ) pode funcionar melhor:
define FILE_VAR
$(shell cat /output/1.txt > /output/2.txt)
$(eval s := $(shell cat /output/2.txt))
$(eval FILENAME_BIN=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).bin)
$(eval FILENAME_JFFS2=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).jffs2)
endef
$(eval $(FILE_VAR))
all:
echo $(FILENAME_BIN)
Eu usei > em vez de >> , então 2.txt não aumenta a cada execução.