Makefileを使用して_docker run
_ターゲットを実行します。これには、パラメーターの1つとして現在の作業ディレクトリが必要です。
$(PWD)
または$(CURDIR)
を使用します:
_build: Dockerfile
docker run ... <$(PWD) or $(CURDIR)>
_
彼らは同じ価値を生み出しているようです。後で噛み付くような微妙な違いがあるかどうかはわかりません。そのため、それぞれの正確な定義を知りたいのです。
man make
_Makefileの$(PWD)
と$(CURDIR)
の違いは何ですか?
CURDIR
を使用します。
まず、 彼のコメント に対して Renaud Pacalet に感謝します。
CURDIR
引用 GNU Make Manual :
[〜#〜] curdir [〜#〜]
現在の作業ディレクトリの絶対パス名に設定します。
便宜上、GNU makeが起動すると(-Cオプションを処理した後)、変数CURDIRが現在の作業ディレクトリのパス名に設定されます。この値は、makeによって再び変更されることはありません。特に、他のディレクトリのファイルを含める場合、CURDIRの値は変更されないことに注意してください。この値は、makefileで設定された場合と同じ優先順位を持ちます(デフォルトでは、環境変数CURDIRはこの値をオーバーライドしません)。この変数を設定しても、makeの操作には影響しません(たとえば、makeが作業ディレクトリを変更することはありません)。
PWD
MakeマニュアルにはPWD
への言及はありません。クイック env | grep PWD
は、環境(私の場合はzsh)によって設定されていることがわかりました。 特別なシェル変数 に関するGNUの注記は、次のように述べています。
PWD
Posix 1003.1-2001では、cdおよびpwdが現在のディレクトリの論理名を指すようにPWD環境変数を更新する必要がありますが、従来のシェルはこれをサポートしていません。これは、1つのシェルインスタンスがPWDを維持しているが、補助的で別のシェルがPWDを認識せず、cdを実行する場合に混乱を引き起こす可能性があります。この場合、PWDは間違ったディレクトリを指します。 「pwd
' rather than
$ PWD '。
CURDIR
はMake
で動作することが保証されているため、PWD
mightはシェルから継承されるため、前者が優先されます。