Makefile에서 빈 변수 이름 오류를 방지하는 방법

Makefile에서 빈 변수 이름 오류를 방지하는 방법

이 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) 라인이 다음과 같이 정의됩니다.makemake BUILDVERSION=somethingsomething함수형 매크로as로 사용하면 두 번째 인수로 확장되고 $(call something, ...)b) 다음을 내보냅니다.비어 있는somethingmake 규칙에서 실행되는 명령의 이름을 딴 환경 변수입니다.

정의되지 않았거나 빈 문자열로 정의된 경우 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가 아니기 때문입니다.

관련 정보