Я не думаю, что вы должны использовать фигурные скобки для переменных Makefile: $ (END) не $ {END}
Вы хотите вычитание, но вы использовали '*'.
jcomeau@intrepid:/tmp$ cat Makefile
START=3
END=5
DIFF_SUB=$(shell echo $(END)-$(START) | bc)
test:
@echo it took $(DIFF_SUB) seconds
jcomeau@intrepid:/tmp$ make
it took 2 seconds
Если вы делаете это внутри цели, используйте фигурные скобки, но удвойте $ s: $${DIFF_SUB}
jcomeau@intrepid:/tmp$ cat Makefile
START=3
END=5
DIFF_SUB=$(shell echo $(END)-$(START) | bc)
test:
@echo it took $(DIFF_SUB) seconds
test2:
@START=3 && \
echo HELLO && \
END=7 && \
DIFF_SUB=$$(($$END - $$START)) && \
echo it took $${DIFF_SUB} seconds
jcomeau@intrepid:/tmp$ make test test2
it took 2 seconds
HELLO
it took 4 seconds