$
Makefile 内で for Bashを使用する場合は、それらを 2 倍にする必要があります$$a
。私は表記法に精通していません$'
が、あなたがそれで何をしているのか知っていると仮定する必要があります. それが Makefile コンストラクトでない限り、そのコンストラクトでもドル記号を 2 倍にする必要があります。
また、ハッシュ記号#
は Make の評価でシェル展開を終了させます。これが、正しい括弧が表示されない理由です。エスケープすることは役に立ちますが、まだうまく機能していません。
私は2つのステップでデバッグしています。最初にGCCVERを囲みのないコマンドのリストに$(shell)
設定し、次に2番目のステップで設定します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
あなたのシステムは私のものと同じようには機能しないので、私は対処して、reinierpost の提案を使用するか、代わりに次のように言います。
GCCVER := $(shell gcc -dumpversion | cut -d. -f1,2)