Follow-up Comment #3, bug #67195 (group make):

> Furthermore, if we remove (or ignore) the 'all' target and directly specify
> '../include/file.x' as a goal:
> 
>> make ../include/file.x
> 
> then this results in:
> 
> make: '../lib/include/../include/file.x' is up to date.
> 
> This demonstrates that searching in the vpath is done not only for
> prerequisites but also for targets which IMHO is wrong as well.

Do you think '../include/file.x' is a prerequisite or a target?
'../include/file.x' is both a prerequisite and a target.


> Note that the rule '../include/%.x: %.x' matches the goal, and the
> prerequisite should thus be the plain 'file.x', which would then be found in
> the vpath, which in turn results in the behavior I expected.

There is prerequisite 'file.x' and make finds 'file.x' as
'../lib/include/file.x' through directory search.
Whether '../include/file.x' is specified as a target on the command line or
not, the behavior of make is the same.
In either case, make uses directory search to find
'../include/file.x' as '../lib/include/../include/file.x'
and
'file.x' as '../lib/include/file.x'.


> But now I wonder if this "search for relative paths" is done simply by
> concatenating the elements of the vpath with the prerequisite.

It is concatenating on the filesystems which use /. It is slightly more
complex on the filesystems which use other delimiters.


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?67195>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to