Makefile - Subst - Variable wird nicht ersetzt

Makefile - Subst - Variable wird nicht ersetzt

Ich versuche, den folgenden Befehl auszuführen, substum eine Zeichenfolge /var/jenkins_homedurch 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 substtestder Wert HOST_LOG_FILEunverä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]

Bildbeschreibung hier eingeben

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,

Bildbeschreibung hier eingeben

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

verwandte Informationen