![FreeBSD make(bmake) 및 macOS make(GNU Make 3.81)와 작동하도록 makefile에서 쉘 배포를 어떻게 사용합니까?](https://linux55.com/image/216239/FreeBSD%20make(bmake)%20%EB%B0%8F%20macOS%20make(GNU%20Make%203.81)%EC%99%80%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8F%84%EB%A1%9D%20makefile%EC%97%90%EC%84%9C%20%EC%89%98%20%EB%B0%B0%ED%8F%AC%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%82%AC%EC%9A%A9%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
!=
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는 첫 번째 할당에 대해 실제로 신경 쓰지 않습니다. 왜냐하면 두 번째 할당이 어쨌든 덮어쓰기 때문입니다.