Makefile - Subst - не заменяет переменную

Makefile - Subst - не заменяет переменную

Я пытаюсь выполнить следующую 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"

Вам следуетнетЗаключайте в кавычки значения переменных в Makefiles. Это не оболочка, кавычки не являются чем-то особенным и не удаляются.

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))

Связанный контент