
이 makefile의 실행 명령과 함께 버전을 언급할 때마다 해당 버전은 VERSION 변수에 저장되어야 하며, 버전이 언급되지 않으면 기본값을 사용해야 합니다.
이것은 내 Makefile입니다.
export $(BUILDVERSION) = $2
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifneq ($(BUILDVERSION),undefined)
VERSION := $(VERS)
endif
ifneq ($(BUILDVERSION),undefined)
VERSION := $(BUILDVERSION)
endif
$(info VERSION is $(VERSION))
사례 1: 실행 인수를 포함하면 이 출력이 표시됩니다.
BUILDVERSION is "VABCDE.00.00A001"
vers is VABCDE.00.00A002
VERSION is "VABCDE.00.00A001"
사례 2: 실행 인수를 포함하지 않으면 이 오류가 발생합니다.
Makefile:1: *** empty variable name. Stop.
Makefile:1: *** empty variable name. Stop.
누구든지 내 코드에 문제가 있는지 찾는 데 도움을 주실 수 있나요?
답변1
잘 모르겠습니다. 질문을 이해합니다.
make
외부에서 버전 번호를 제공 하고 명령줄에 버전이 제공되지 않은 경우 기본값을 사용하는 작업인 경우 . 그러면 makefile
다음과 같아야 합니다.
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifdef BUILDVERSION
VERSION := $(BUILDVERSION)
else
VERSION := $(VERS)
endif
$(info VERSION is $(VERSION))
그리고 당신은 그것을 다음과 같이 호출할 것입니다:
make BUILDVERSION="not-default-version"
답변2
export $(BUILDVERSION) = $2
tl;dr; GNU make는 bash가 아닙니다.
는 as를 $(BUILDVERSION)
호출한 경우에만 모든 항목으로 확장되며 , 이로 인해 해당 행은 a) 로 정의됩니다.make
make BUILDVERSION=something
something
함수형 매크로로 사용될 때 두 번째 인수로 확장되고 $(call something, ...)
b)비어 있는something
make 규칙에서 실행되는 명령에 명명된 환경 변수입니다 .
BUILDVERSION
정의되지 않았거나 빈 문자열로 정의된 경우 해당 empty variable name
오류가 발생합니다.
$ make -f - <<'EOT' BUILDVERSION=something
export $(BUILDVERSION) = $2
all:; set | grep ^something; echo XXX $(call something,first,second)
EOT
set | grep ^something; echo XXX second
something=''
XXX second
$2
하다~ 아니다make의 명령줄에 전달된 두 번째 인수로 확장하세요. 왜냐하면 ... make는 bash가 아니기 때문입니다.