при использовании $
для Bash внутри Makefile вам нужно удвоить их: например, $$a
. Я не знаком с обозначением $'
, но должен предположить, что вы знаете, что с этим делать. если это не конструкция Makefile, вам также нужно удвоить знак доллара на ней.
Кроме того, знак решетки #
завершает расширение оболочки в оценке Make, поэтому он никогда не видит правильную скобку. побег от него помогает, но у меня он еще не работает совсем правильно.
Я отлаживаю его, выполнив два шага: сначала устанавливаю GCCVER как список команд без закрывающего $(shell)
, затем на втором шаге устанавливаю GCCVER := $(shell $(GCCVER))
. вы можете попробовать и это, закомментировав шаг $(shell)
, если он не работает, используя export
и создав рецепт "набора":
GCCVER := some commands here
#GCCVER := $(shell $(GCCVER)) # expand the commands, commented out now
export # all variables available to shell
set:
set # make sure this is prefixed by a tab, not spaces
Затем:
make set | grep GCCVER
[обновить] это работает:
GCCVER := a=`mktemp` && echo -e '\#include <stdio.h>\nmain() {printf("%u.%u\\n", __GNUC__, __GNUC_MINOR__);}' | gcc -o "$$a" -xc -; "$$a"; rm "$$a"
GCCVER := $(shell $(GCCVER))
export
default:
set
jcomeau@intrepid:/tmp$ make | grep GCCVER
GCCVER=4.6
И полный круг, избавившись от лишнего шага:
jcomeau@intrepid:/tmp$ make | grep GCCVER; cat Makefile
GCCVER=4.6
GCCVER := $(shell a=`mktemp` && echo -e '\#include <stdio.h>\nmain() {printf("%u.%u\\n", __GNUC__, __GNUC_MINOR__);}' | gcc -o "$$a" -xc -; "$$a"; rm "$$a")
export
default:
set
Используя конструкцию $'
Bash:
jcomeau@intrepid:/tmp$ make | grep GCCVER; cat Makefile
GCCVER=4.6
GCCVER := $(shell a=`mktemp` && echo $$'\#include <stdio.h>\nmain() {printf("%u.%u\\n", __GNUC__, __GNUC_MINOR__);}' | gcc -o "$$a" -xc -; "$$a"; rm "$$a")
export
default:
set
Поскольку ваша система работает не так, как моя, я собираюсь отговориться и сказать, что либо используйте предложение рейньерпоста, либо, в качестве альтернативы:
GCCVER := $(shell gcc -dumpversion | cut -d. -f1,2)
person
jcomeau_ictx
schedule
12.08.2011
$(shell gcc -v 2>&1 | tail -1 | awk '{print $$3}')
? - person reinierpost   schedule 12.08.2011