値が変更されるように、次のコマンドを実行してある文字列を別の文字列に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))