Makefile - Subst - 변수를 대체하지 않음

Makefile - Subst - 변수를 대체하지 않음

다음 명령을 실행하여 한 문자열을 다른 문자열 로 subst바꾸려고 합니다 ./var/jenkins_home/srv/jenkins-slave-1/dataHOST_LOG_DIR/var/jenkins_home/workspace/ts_myapp_testing_integration-tests/srv/jenkins-slave-1/data/workspace/ts_myapp_testing_integration-tests

하지만 makefile 대상을 실행하면 substtest값이 HOST_LOG_FILE변경되지 않은 채로 유지됩니다(스크린샷 참조).

WORKSPACE               := "/var/jenkins_home/workspace/ts_myapp_testing_integration-tests"
JENKINS_HOME            := "/var/jenkins_home"
JENKINS_HOME_HOST_PATH  := "/srv/jenkins-slave-1/data"
HOST_LOG_DIR            :=  $(subst $(JENKINS_HOME),$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))

.PHONY: substtest, print_env

substtest: print_env

print_env:
    @echo "WORKSPACE is ${WORKSPACE}"
    @echo "JENKINS_HOME is ${JENKINS_HOME}"
    @echo "JENKINS_HOME_HOST_PATH is ${JENKINS_HOME_HOST_PATH}"
    @echo "HOST_LOG_DIR is ${HOST_LOG_DIR}"][1]][1]

여기에 이미지 설명을 입력하세요

$(JENKINS_HOME)이상한 점은 실제 경로 값으로 바꿀 때입니다 /var/jenkins_home. 즉

HOST_LOG_DIR := $(subst /var/jenkins_home,$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))

그러면 예상대로 작동합니다.

여기에 이미지 설명을 입력하세요

하드 코딩된 대체 없이 작동하도록 이 문제를 수정해야 합니다.

답변1

JENKINS_HOME            := "/var/jenkins_home"

당신은해야~ 아니다Makefile의 변수 값을 인용하십시오. 이것은 쉘이 아니며 따옴표는 어떤 식으로든 특별하지 않으며 제거되지 않습니다.

WORKSPACE               := /var/jenkins_home/workspace/ts_myapp_testing_integration-tests
JENKINS_HOME            := /var/jenkins_home
JENKINS_HOME_HOST_PATH  := /srv/jenkins-slave-1/data
HOST_LOG_DIR            :=  $(subst $(JENKINS_HOME),$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))

관련 정보