How does make determine which shells to invoke when executing external commands?

Hua Ai
Wed Jun 5 15:32:00 GMT 2013

Hi all,

I have gone through FAQ and mailing lists but couldn't find an answer
to this. I would appreciate it if someone could shed some lights on

Basically I have a makefile that works in some computers but not
others. Through troubleshooting I think I have located the problem to
the lines below:

   @mkdir -p $(dir $@)
   @cp $< $@
   @chmod u+w $@

Especially, this line:

   @mkdir -p $(dir $@)

It seems that, for the computers where it didn't work, the makefile
always invokes the mkdir from windows (Windows 7 64bit). I know this
because I replaced the line above with "@mkdir aboslute_path" in the
make file, and find that it works if the absolute_path uses \ instead
of /.  If I leave -p in there, it would create a directory named "-p".

If I type in "mkdir -p aboslute_path" in cygwin bash shell instead of
running it from the makefile, it would support -p switch and forward
slash / in the path.

So it sounds like when make executes mkdir from a makefile, it invokes
windows command shell(?) to run mkdir. But if I add "which mkdir" in
the makefile, it returns "/usr/bin/mkdir", which is the same as if I
types "which mkdir" in the bash shell.

My questions are:

1. From what I described, do you think the make program invoked
windows command shell to execute mkdir? How to confirm that (or is it
apparent already)?
2. How can I make sure the make program consistently invokes bash
shell for executing mkdir from the makefile? (some computer
environment does this already, and others doesn't)

Thanks in advance!


Problem reports:
Unsubscribe info:

More information about the Cygwin mailing list