我正在尝试运行以下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 中的变量值。这不是 shell,引号没有任何特殊之处,也不会被删除。
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))