이 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
너무 길어요. GNU make는 bash가 아닙니다.
호출하면 $(BUILDVERSION)
무엇이든 확장되어 a) 라인이 다음과 같이 정의됩니다.make
make BUILDVERSION=something
something
함수형 매크로as로 사용하면 두 번째 인수로 확장되고 $(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가 아니기 때문입니다.