This is from the Cygwin website, don't know if it's any help to you or not:
Why is make behaving badly?
First of all, if you are using `make -j[N]', then stop. It doesn't work well.
Otherwise, read on...
Make has two operating modes, UNIX and WIN32. You need to make sure that you are operating in the right mode.
In UNIX mode, make uses sh.exe as a subshell. The path list separator is ':', '\' is the escape character, POSIX paths are expected, and Cygwin mounts will be understood. Use this for Makefiles written for UNIX.
In WIN32 mode, make uses the "native" command shell (cmd.exe or command.com), with all the restrictions that implies. The path list separator is ';', the path separator is '\', "copy" and "del" work, but the Cygwin mount table is not understood. Use this for nmake-style Makefiles.
The default mode for the Net Release of make (the one installed by setup.exe) is UNIX. The default mode for commercial releases to Redhat (formerly Cygnus) customers is WIN32.
You can override the default by setting the environment variable MAKE_MODE to "UNIX" (actually case is not significant) or "WIN32" (actually anything other than "UNIX"

. You can also specify the options --unix or --win32 on the make command line.
Hope that helped