!=
FreeBSD、macOS、Linuxで実行されるmakefileでシェル割り当て演算子(たとえば)を使用したいと思います。例は次のとおりです。
a!= seq 3
.PHONY: all
all: $a
.PHONY: $a
$a:
@echo $@
予想される結果は次のとおりです。
$ touch 1 2 3
$ make all
1
2
3
残念ながら、macOS Monterey 12.6.1に付属のGNU Makeはシェル割り当て演算子をサポートしておらず、この例の出力は空です。これは、最近のLinuxディストリビューションに触れる可能性がある最新バージョンのGNU Make(4.4など)で実行されます。
このmakefileがすべてのバージョンのGNU makeとbmakeで動作するようにするにはどうすればよいですか?
答え1
$(shell ...)
解決策は、次のようにシェル割り当て演算子でこの構成を使用することです。
a= $(shell seq 3)
a!= seq 3
.PHONY: all
all: $a
.PHONY: $a
$a:
@echo $@
GNU Make 3.81はシェル割り当てをスキップするように見えるため、最初の割り当ての出力を使用します。しかし、bmakeは最初の割り当てについて実際に気にしません。なぜなら、2番目の割り当てがとにかく上書きされるからです。