Makefile - Subst - 変数を変更しないでください

Makefile - Subst - 変数を変更しないでください

値が変更されるように、次のコマンドを実行してある文字列を別の文字列にsubst置き換えようとします。/var/jenkins_home/srv/jenkins-slave-1/dataHOST_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))

おすすめ記事