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