
값이 변경 되도록 다음 명령을 실행하여 한 문자열을 다른 문자열로 subst
바꾸려고 합니다./var/jenkins_home
/srv/jenkins-slave-1/data
HOST_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))