Ich versuche, den folgenden Befehl auszuführen, subst
um eine Zeichenfolge /var/jenkins_home
durch eine andere zu ersetzen /srv/jenkins-slave-1/data
, sodass sich der Wert in von in
HOST_LOG_DIR
ändert/var/jenkins_home/workspace/ts_myapp_testing_integration-tests
/srv/jenkins-slave-1/data/workspace/ts_myapp_testing_integration-tests
aber wenn ich das Makefile-Ziel ausführe, bleibt substtest
der Wert HOST_LOG_FILE
unverändert (siehe Screenshot).
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]
Das Seltsame ist, wenn ich $(JENKINS_HOME)
durch den tatsächlichen Pfadwert ersetze /var/jenkins_home
, d. h.
HOST_LOG_DIR := $(subst /var/jenkins_home,$(JENKINS_HOME_HOST_PATH),$(WORKSPACE))
dann funktioniert es wie erwartet,
Ich muss das beheben, damit es ohne die fest codierte Ersetzung funktioniert.
Antwort1
JENKINS_HOME := "/var/jenkins_home"
Du solltestnichtSetzen Sie die Variablenwerte in Makefiles in Anführungszeichen. Dies ist keine Shell, die Anführungszeichen haben keine besondere Bedeutung und werden nicht entfernt.
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))