!=
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는 첫 번째 할당에 대해 실제로 신경 쓰지 않습니다. 왜냐하면 두 번째 할당이 어쨌든 덮어쓰기 때문입니다.