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"

你应该不是引用 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))

相关内容