I use a Makefile to run a docker run
target, which needs the current working directory as one of its parameters.
I use either $(PWD)
or $(CURDIR)
:
build: Dockerfile
docker run ... <$(PWD) or $(CURDIR)>
They seem to be producing the same value. I don't know if there's a subtle difference that can bite me later, so I want to know the exact definition of each of them.
man make
What is the difference between $(PWD)
and $(CURDIR)
in a Makefile?
PWD is the current working directory when the process is started, but it is constant. process. cwd() is asking the underlying system for the process's current directory, which can be changed with process.
Set to the absolute pathname of the current working directory.
How can I get PWD in makefile? You can use shell function: current_dir = $(shell pwdpwdIn Unix-like and some other operating systems, the pwd command (print working directory) writes the full pathname of the current working directory to the standard output.
You can go back to the parent directory of any current directory by using the command cd .. , as the full path of the current working directory is understood by Bash . You can also go back to your home directory (e.g. /users/jpalomino ) at any time using the command cd ~ (the character known as the tilde).
Use CURDIR
.
First, thanks Renaud Pacalet for his comment.
CURDIR
Quoting the GNU Make Manual:
CURDIR
Set to the absolute pathname of the current working directory.
For your convenience, when GNU make starts (after it has processed any -C options) it sets the variable CURDIR to the pathname of the current working directory. This value is never touched by make again: in particular note that if you include files from other directories the value of CURDIR does not change. The value has the same precedence it would have if it were set in the makefile (by default, an environment variable CURDIR will not override this value). Note that setting this variable has no impact on the operation of make (it does not cause make to change its working directory, for example).
PWD
There's no reference to PWD
in the Make manual. A quick env | grep PWD
found that it was set by the environment (in my case, zsh). GNU's notes about Special Shell Variables
state that:
PWD
Posix 1003.1-2001 requires that cd and pwd must update the PWD environment variable to point to the logical name of the current directory, but traditional shells do not support this. This can cause confusion if one shell instance maintains PWD but a subsidiary and different shell does not know about PWD and executes cd; in this case PWD points to the wrong directory. Use ``pwd
' rather than
$PWD'.
Since CURDIR
is guaranteed to work in Make
in PWD
might be inherited from the shell, the former should be preferred.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With