[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: VPATH of the form C:/foo

From: Greg Chicares
Subject: Re: VPATH of the form C:/foo
Date: Sun, 02 Dec 2007 18:47:33 +0000
User-agent: Thunderbird (Windows/20071031)

On 2007-12-02 17:41Z, Benoit Sigoure wrote:
> On Dec 2, 2007, at 6:13 PM, Christopher Faylor wrote:
>> On Sun, Dec 02, 2007 at 11:52:41AM +0100, Benoit Sigoure wrote:
>>> On Dec 2, 2007, at 3:37 AM, Christopher Faylor wrote:
>>>> This does raise the question of why you'd be using a cygwin  
>>>> version of
>>>> make if you need to use colon paths.
>>> Good question.  The VPATH variable is set by a script that calls  
>>> `make'.
>>> This variable is also used to invoke native Windows tools, so it's  
>>> more
>>> convenient to use the C:/Foo/Bar notation, which has the advantage of
>>> working with both native applications and Cygwin ones (while being  
>>> nice
>>> with the shell by avoiding backslashes).
>> Why not convert the VPATH to UNIX format with cygpath ?
> That's the workaround we use ATM, but I still consider this as a bug  
> that the Windows port of make doesn't deal nicely with Windows paths  
> for this particular feature.  I would prefer to avoid this sort of  
> hack in my scripts:
> case `uname -s` in
>    CYGWIN*) # fix VPATH for b0rken port of make
>     save_IFS=$IFS
>     IFS=';'
>     for p in $vpath; do
>       IFS=$save_IFS
>       vpath_tmp="$vpath_tmp:"`cygpath "$p"`
>     done
>     vpath=$vpath_tmp;;
> esac

I have a similar need: I use native msw compilers in Cygwin 'bash'.
I prefer to 'mount' my base source directory and refer to it with
pure posix notation "/opt/my_source" meaning "C:\opt\my_source".
Then no workaround is needed for 'bash', 'make', or anything else.
The same makefiles work with a native msw port of a *nix shell;
in fact, the following example even works in CMD.EXE :

/tmp[0]$cat Makefile

.PHONY: all
all: WIN.INI
        @echo VPATH is $(VPATH)
        @echo Prerequisites: $^

make: *** No rule to make target `WIN.INI', needed by `all'.  Stop.

/tmp[2]$mount --force "C:/WINDOWS" "/WINDOWS"
Prerequisites: /WINDOWS/WIN.INI

reply via email to

[Prev in Thread] Current Thread [Next in Thread]