ソースコマンド付きのMakefileが動作しない

ソースコマンド付きのMakefileが動作しない

私は次のMakefileを持っています

env:
    source venv/bin/activate

make envPython仮想環境をアクティブにしようとすると、次のエラーが発生します。

source venv/bin/activate make: source: そのようなファイルまたはディレクトリはありません make: *** [env] エラー 1

しかし、source venv/bin/activateシェルでコピーして実行すると、正常に実行されます。Makefile 内で現在のディレクトリを設定する必要がありますか?

答え1

sourceシェル組み込みコマンドであり、シェル以外のどこからでも起動できる実行ファイルではありません。sourceファイルの内容を読み取り、実行します。現在のシェルでは、新しいシェルを起動せずに

その目的は、現在のシェルの状態を変更することです ( だけの場合sh venv/bin/activate、シェルはactivateスクリプトの内容も実行しますが、その後完了して終了します)。

しかし、あなたがやりたいのはmakeプログラムの状態を変更するactivateからどのような方法で生成したシェルでスクリプトを実行してもmake、 が参照する環境については何も変更されませんmake
これは、別のプログラム (B) によって起動されたすべてのプログラム (A) が、起動プログラム (B) の環境の独自のコピーを取得するためです。プログラム (A) は、起動プログラム (B) の環境に影響を与えることなく、その環境を自由に変更できます。

つまり、あなたがやりたいことは、理論上も実現できないのです。

venv 内で Makefile を実行する必要がある場合は、activate最初にスクリプトをソースし、変更されたシェルから起動する必要がありますmake。その逆ではありません。

関連情報