Makefile에서 한 줄 조건 확인

Makefile에서 한 줄 조건 확인

저는 다음과 같은 것을 달성하려고 합니다. 사용자가 실행될 경우 make build_x version=1.0표시하고 Building version 1.0, 그렇지 않으면 ( 매개변수 make build_x없이 version) 표시합니다 Building version latest. 하지만 여기서 핵심은 무엇입니까? 버전을 기본값으로 설정해야 합니다 -(올바르게 사용하려면 git). 그래서 으로 version_info대체된 추가 변수를 사용했습니다 .-latest

그래서 내 코드는 다음과 같습니다

build_x:
    $(eval version ?= -)        
    $(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})

    ${INFO} "Doing checkout according to version $(version_info)..."

주어진 조건에 문제가 있을 수 있다는 것을 알고 있습니다 if.

어떤 아이디어가 있나요?

답변1

이것은 나에게 효과적입니다.

version ?= -
ifeq (-,$(version))
  version_info = latest
else
  version_info = $(version)
endif

build_x:
    @echo version_info = $(version_info)

설정되지 않은 경우 version로 설정 -되고 적절하게 채워집니다 version_info.

대상별 변수 및 한 줄 변형을 사용합니다.

build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
    @echo version_info = $(version_info)

다음과 같이 작동합니다(전체 참조).GNU 문서 만들기):

  • version ?= - 세트version-아직 설정하지 않은 경우
  • if 첫 번째 매개변수를 확인하세요., 비어 있는지 평가하고 첫 번째 인수가 비어 있지 않으면 두 번째 인수로 바꾸고, 비어 있으면 세 번째 인수로 바꿉니다.
  • $(version:-=)평가하다 version,바꾸다-빈 문자열 사용( :교체 도입, 검색 키는 이전 텍스트 =이고 대체는 다음 텍스트임 =)

답변2

여기에서 대상별 변수 값 기능을 최대한 활용할 수 있습니다.

build_x: version := latest
build_x:
     @echo "Building version $(version)"

관련 정보