From: Keith M. <kei...@to...> - 2007-09-27 09:38:44
|
Hi Yongwei, Good to hear from you again! Wu Yongwei wrote: > I noticed a change between Make 3.79 and 3.81. In Make 3.79 I was > able to do the following: > > --------------------------------------------------------------------- > all: debug > > debug: DEBUG DEBUG/test.exe > > DEBUG: > mkdir DEBUG > > DEBUG/test.exe: > ... > > .PHONY: all debug > --------------------------------------------------------------------- > > It worked well in Make 3.79. However, with 3.81 it will complain: > > make: Circular debug <- debug dependency dropped. This exploits what I have long considered to be a misconfiguration of make-3.79 in MSYS; make-3.81 has `--enable-case-insensitive-file-system' turned on, whereas make-3.79 did not. > While I understand it makes some sense on Windows, I doubt whether > there is a way to improve the situation. Otherwise, one would not be > able to name the target "debug" while having a build directory called > "DEBUG", "Debug", or "DeBuG" ;-). Since Woe32 employs a case-insensitive file system, it seems somehow wrong to not enable correct support for this within make. Indeed, it may well cause more serious problems than the above, if you arbitrarily ignore this OS level feature -- an extensive system of Makefiles, which I had developed under DJGPP, fell apart big-time when I tried to port it to MSYS, in the days when only make-3.79 was available. If you are writing Makefiles which you wish to be portable to systems with fundamentally case-insensitive file systems, such as Woe32, then it is dangerous to rely on case-sensitive behaviour in the Makefile rules. If you want to use a directory named with any case-insensitive variation of `debug', then don't use `debug' as a phony target; instead, you could use `all-debug', or some such alternative name. Regards, Keith. |