Makefileにはenvファイルが含まれています。

Makefileにはenvファイルが含まれています。

Makefileにいくつかの環境変数を含めようとしています。 envファイルは次のとおりです。

FOO=bar
BAZ=quux

export各環境変数は起動できません。 Makefileにプリアンブルexportとenvファイルを追加すると、includeすべてがうまく機能します。しかしexport、。これにより、include envfileMakefileでのみ使用できなくなります。

私も次のことを試しました。

sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env

ただし、これを行うと、含めるenvファイルが存在しないため、makeでエラーが発生します。

答え1

私も同様の問題があり、このスレッドに到着しました。別の考えられる解決策は、引数なしで make エクスポートコマンドを実行することです。

include .env
export

これにより、すべてのmake変数が環境変数としてエクスポートされます。この動作はすべてのユースケースと一致する場合もそうでない場合もありますが、私には機能し、シェルスクリプトの魔法は含まれていません。

答え2

gnu makeを使用している場合は、このenvfileファイルを含めてから同じファイルから取得した変数のリストをエクスポートする必要があります。

#!make
include envfile
export $(shell sed 's/=.*//' envfile)

test:
        env

答え3

以前の回答を完了するためにmeuhenvファイルを動的に作成するには、設定機能を定義できます。

  • 一部のコンテンツを含むenv/local-dev.envファイルの作成env/integ.env
  • ロードする方法を定義します。
    setup_env 定義
        $(評価 ENV_FILE := env/$(1).env)
        @echo "-設定環境 $(ENV_FILE)"
        $(評価には env/$(1).env が含まれます)
        $(評価のエクスポート sed 's/=.*//' env/$(1).env)
    エンデブ

それからそれを使う

    localDevEnv: ##env/local-dev.env 環境のロード
        $(setup_env,local-dev 呼び出し)
    integEnv: ##env/integ.env 環境のロード
        $(setup_env 呼び出し、整数)

答え4

既存のENV変数を保持

export $(shell [ ! -n "$(ENVFILE)" ] || cat $(ENVFILE) | grep -v \
    --perl-regexp '^('$$(env | sed 's/=.*//'g | tr '\n' '|')')\=')

test:
    echo $$FOO

走る

make ENVFILE=envfile test # bar

export FOO=foo
make ENVFILE=envfile test # foo

関連情報