FreeBSD make(bmake) 및 macOS make(GNU Make 3.81)와 작동하도록 makefile에서 쉘 배포를 어떻게 사용합니까?

FreeBSD make(bmake) 및 macOS make(GNU Make 3.81)와 작동하도록 makefile에서 쉘 배포를 어떻게 사용합니까?

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

관련 정보