Makefile의 함수가 조건을 무시하고 예기치 않게 실행되는 것처럼 보이는 경우

Makefile의 함수가 조건을 무시하고 예기치 않게 실행되는 것처럼 보이는 경우

다음은 간단한 방법이지만 원하는 대로 작동하지 않습니다.

$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))

$(if ifeq ($(strip ${PkgName}),), pacman -Sy --noconfirm zsh)

내가 원하는 것은 이전에 설치되지 않은 패키지를 설치하는 것뿐입니다. 시스템에 패키지가 없으면 설치가 성공적으로 수행됩니다. 그러나 설치된 경우에도 실행됩니다.

나는 동일한 결과로 GNU make 조건부 ifeq를 시도했습니다.

패키지가 시스템에 이미 존재하는 경우 패키지가 실행되는 것을 방지하는 방법은 무엇입니까?

답변1

다음과 같이 작성할 수 있습니다.

$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))

$(if ${PkgName},,pacman -Sy --noconfirm zsh)

이렇게 하면 오류 없이 모든 작업이 수행됩니다.

다시 한 번 감사드립니다. 이것이 미래에 누군가에게 도움이 되기를 바랍니다.

답변2

$(if cond,true_path,false_path)make 와 조건을 혼동하고 있습니다 ifeq.

사용 사례에 따라 make 변수를 정의 $(STATUS)하고 if 문에 install이 누락되었는지 확인할 수 있습니다.

STATUS := $(if $(strip $(shell pacman -Qq zsh | awk '{print $$1}')),,$(strip $(shell pacman -Sy --noconfirm zsh)))

관련 정보