아래 코드 조각과 같은 것이 있습니다. 쉘 스크립트 로직을 통해 Makefile에서 정의되지 않은 ENV 변수를 올바르게 설정하는 방법은 무엇입니까? 스크립트가 실행되고 환경 변수가 환경에 이미 정의되어 있으면 모든 것이 작동하는 것처럼 보이지만 그렇지 않은 경우 기본값으로 설정되지 않습니다(비어 있거나 설정되지 않은 상태로 유지).
나는 비슷한 것을 선호 FROM_ENV_VAR=${FROM_ENV_VAR:-"default value"}
하지만 Makefile 구문에는 다른 ENV var(물론 동일한 var일 수 있음)에서 변수를 설정하고 그렇지 않으면 기본값을 할당하는 것과 같은 것이 있습니까?
MAKE_VAR=fromake
.PHONY: trial
trial:
if [ -z ${FROM_ENV_VAR} ]; then \
FROM_ENV_VAR="defaulting"; \
echo "setting VAR since not defined from ENV, val: ${FROM_ENV_VAR}"; \
echo "and make's VAR is ${MAKE_VAR}, from shell script"; \
else \
echo "using ENV VAR's defined value: ${FROM_ENV_VAR}"; \
echo "and make's VAR is ${MAKE_VAR}, from shell script"; \
fi
echo "in make, make var is $(MAKE_VAR)"
echo "in make, shell var is $(FROM_ENV_VAR)"
답변1
?=
아직 정의되지 않은 변수만 설정하는 조건부 변수 할당 연산자를 사용할 수 있습니다 . 자세한 내용은 하단 참조이것설명서의 페이지 make
.
예를 들어 다음 Makefile을 사용합니다.
MYVAR?=Set by make
.PHONY: all
all:
@echo ${MYVAR}
다음과 같은 결과를 얻게 됩니다:
$ make
Set by make
$ MYVAR="Set on the command line" make
Set on the command line