このMakefileがあり、単にいくつかの変数を設定するのに問題があります。
my_stage:
echo "FULL_NAME=$(FULL_NAME)"
echo "MY_NAME=$(MY_NAME)"
$(eval SOME_NAME=$(shell sh -c "echo ${FULL_NAME} | cut -d"-" -f 2"))
echo "SOME_NAME=$(SOME_NAME)"
$(eval NAME_ONLY=$(shell sh -c "echo ${SOME_NAME}-only))
echo "NAME_ONLY=$(NAME_ONLY)"
$(eval RIGHT_NAME=$(shell sh -c "echo ${SOME_NAME}-right))
$(eval NAME_APPENDED=$(shell sh -c "echo ${RIGHT_NAME}.${MY_NAME}))
echo "NAME_APPENDED=$(NAME_APPENDED)"
偽装結果は次のとおりです。
FULL_NAME=Shop-with-me
MY_NAME=Mariana
SOME_NAME=with
NAME_ONLY=with-only
NAME_APPENDED=with-right.Mariana
ただし、現在の結果は次のとおりです。
FULL_NAME=Shop-with-me
MY_NAME=Mariana
SOME_NAME=with
NAME_ONLY=
NAME_APPENDED=
誰かが私が何が起こっているのかを理解するのに役立ちますか?私は何が間違っていましたか?
私もこれを試しましたが(成功しませんでした):
my_stage:
echo "FULL_NAME=$(FULL_NAME)"
echo "MY_NAME=$(MY_NAME)"
$(eval SOME_NAME=$(shell sh -c "echo ${FULL_NAME} | cut -d"-" -f 2"))
echo "SOME_NAME=$(SOME_NAME)"
NAME_ONLY = ${SOME_NAME}-only
echo "NAME_ONLY=$(NAME_ONLY)"
RIGHT_NAME = ${SOME_NAME}-right
NAME_APPENDED = ${RIGHT_NAME}.${MY_NAME}
echo "NAME_APPENDED=$(NAME_APPENDED)"
ベストアンサー1
${FOO}
コマンドに中かっこ(例:)を使用すると、aaを参照します。シェル呼び出しシェルで定義された変数make
。
$(fOO)
たとえば、コマンドで括弧を使用すると、makeの変数を参照します。
makeの変数のみを設定するので、同じ名前のシェル変数を参照すると、明らかにNULL値が発生します。
だから$(eval NAME_ONLY=$(shell sh -c "echo $(SOME_NAME)-only))
動作する必要があります。
単純さは$(eval NAME_ONLY = $(SOME_NAME)-only)
規則に従うべきです。このためにシェルを呼び出す必要はありません。
makeの使用を検討することもできます。テキスト機能、良いsubst
。