Makefile - 単一ステップで複数の変数を設定する

Makefile - 単一ステップで複数の変数を設定する

この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

おすすめ記事