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

Hua Ai tommy.ai@gmail.com
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
this:

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:

$(PREFIX)/include/cyg/hal/basetype.h:
$(REPOSITORY)/$(PACKAGE)/include/basetype.h
   @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!

Regards,
Hua

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list