環境変数のエクスポートがMakefileでは機能しません。

環境変数のエクスポートがMakefileでは機能しません。

私たちは次のことを行いますMakefile

test:
    export SOME_ENV=someTest
    go test -tags=integration -v -race  ./tests/integrationtest/...

シェルプロンプトでSOME_ENVを設定し、次のコマンド()はgo test内部的に.someTest.envファイルを選択します。

 $ export SOME_ENV=someTest
 $ go test -tags=integration -v -race  ./tests/integrationtest/...

しかし、Makefileメソッドは機能しません。

Makefile環境変数を設定する方法がないのはなぜですか?

注:Makefileには、このエクスポートの影響を受けない別の操作があります。

答え1

レシピの各行は、別々のシェル呼び出しを使用して実行されます。だから

export SOME_ENV=someTest

実行された後、新しいシェルで

go test ...

後者は環境変数を見ることができません。

変数をエクスポートするには、Makeのコンストラクタを使用する必要があります。

export SOME_ENV := someTest

test:
        go test ...

またはインライン変数を指定します。

test:
        SOME_ENV=someTest go test ...

または、次の2行が同じシェルで実行されていることを確認してください。

test:
        export SOME_ENV=someTest && \
        go test ...

答え2

@Stephen kittが指摘したように、エクスポートはmakeを呼び出すシェルではなく別のシェルに適用されます。エクスポート前のコマンドも make で実行された場合、彼の答えは解決策を提供しますが、次のようにすることができます. make 以外で使用するには、次のようにします。

print_my_env:
    echo 'export MY_ENV="blue"'

それから:

eval "$(make print_my_env)"

echo "$MY_ENV" を実行すると環境を取得できます。

関連情報