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 内の変数値を引用符で囲みます。これはシェルではないので、引用符は特別なものではなく、削除されません。

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

関連情報