Makefileで変更されたPATHを現在の端末にエクスポートする際にいくつかの問題があります。 Makefileディレクトリを含むbinフォルダをPATHに追加しようとしています。
makefileの関連部分は次のとおりです。
PATH := $(shell pwd)/bin:$(PATH)
install:
mkdir -p ./bin
export PATH
echo $(PATH)
echoはこれを正しく印刷しますが、端末でechoを再実行するとPATHは変わりません。
ベストアンサー1
あなたはそうすることはできません。 makeプロセスは親環境(または次に考える現在のディレクトリ)を変更できません。
実際に思ったより少ないことが起こります。
- すべての実装が環境で
make
変数を作成するための割り当てを反映するわけではありません。PATH
GNU make(Linuxや他のシステムにある)は反映されますが、BSD makeはそうではありません。 - ターゲットの下の各コマンドラインは、別々のサブシェルで実行されます。 (一部の以前のBSD make実装を除いて)したがって、この
export PATH
行はシェルで実行され、すぐに終了します。この行が最初から何もしません。PATH
後で定義されている場合、これはすでにシェル環境にあるためです。
Makeは自動的にものを作ることです。対話型環境の変数を設定する場合、これは考慮すべきツールではありません。代わりにシェルピースを作成し、源泉現在のシェルから:
. ./define-my-variables.sh
makefileからスクリプトを入手してください。各サブシェルで。バックスラッシュを使用して長いコマンドを書くことができます。
- バックスラッシュの改行シーケンスはmakeによって削除されるため、シェルはそこにある改行を見ることができません。
- それでも各行の前にタブ文字を追加することを忘れないでください。
- Makeの誤動作は、コマンドが失敗したときに中断されることです。シェルはデフォルトではこれを実行せず、最後のコマンドを除くすべてのコマンドの失敗はデフォルトで検出されないため、実行する必要があります
set -e
。
install:
set -e; \
. ./define-my-variables.sh; \
mkdir -p bin; \
…
1注意すべき点:賢明な方法はありません。デバッガからリモートchdir
で呼び出す場合でも、ptrace
現在のディレクトリを変更するのが好きではないため、ほとんどのシェルのようには機能しません。