규칙의 명령 부분에 사용 된 정의에 사용 된 조건부의 Makefile 문제

StackOverflow https://stackoverflow.com/questions/228567

  •  04-07-2019
  •  | 
  •  

문제

나는 이런 종류의 구조를 가진 makefile 섹션이 있습니다.


bob:
ifdef DEBUG
    @echo running
endif
    @echo chug chug chug
ifdef DEBUG
    @echo done
endif    

bobit:
    @echo "before"
    @make bob
    @echo "after"

나는 여기서 크게 단순화하고 있습니다. 모든 에코는 실제로 사소한 명령 블록이며 조건부가 더 많지만 이것은 내 문제의 본질을 포착합니다.

기술적 인 이유로 지금 당장 들어가고 싶지 않기 때문에 그 잠수함을 제거해야하지만, 에코는 사소한 양의 코드를 나타내므로 밥의 몸을 대신하여 복사하고 지나가는 것을 원하지 않습니다. 잠수함.

이상적으로 내가하고 싶은 것은 이와 같은 것입니다


define BOB_BODY 
ifdef DEBUG
    @echo running
endif
    @echo chug chug chug
ifdef DEBUG
    @echo done
endif
endef

bob:
    $(BOB_BODY)

bobit:
    @echo "before"
    $(BOB_BODY)
    @echo "after"

불행히도 조건부가 저를 샤프하는 것처럼 보이며, "ifdef : 명령을 찾지 못했습니다"오류를 생산합니다. 나는 다양한 평가와 전화의 조합으로 이것을 돌아 다니려고했지만 그것을 작동시키는 방법을 찾을 수는 없습니다.

이 일을하려면 어떻게해야합니까? 그리고 문제에 접근하는 것이 올바른 방법일까요?

도움이 되었습니까?

해결책

내가 이것을 고치는 방식은 대신 배쉬 조건부를 사용하는 것입니다. 실제로 규칙을 만들지 않고 명령을 가지고 놀기 때문에 실제로 어느 정도 의미가 있습니다.

따라서 위의 이상적인 솔루션은 다음과 같습니다


define BOB_BODY
    @if [[ -n "$(DEBUG)" ]]; then \
        echo running; \
    fi;
    @echo chug chug chug
    @if [[ -n "$(DEBUG)" ]]; then \
        echo done; \
    fi
endef

밥 : $ (bob_body)

bobit : @echo "이전"$ (bob_body) @echo "After"

다른 팁

ifdef/define의 순서를 간단히 변경할 수 있습니다.

ifdef DEBUG
  define BOB_BODY 
    @echo running
    @echo chug chug chug
    @echo done
  endef
else 
  define BOB_BODY 
    @echo chug chug chug
  endef
endif

업데이트

define CHUG
  @echo chug chug chug
endef

ifdef DEBUG
  define BOB_BODY 
    @echo running
    $(CHUG)
    @echo done
  endef
else 
  define BOB_BODY 
    $(CHUG)
  endef
endif
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top