Subject: B20: make confused with //a style drive specifiers
From: Graham Dumpleton <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Mon, 15 Feb 1999 20:59:23 +1100 (EST)

Came across the following problem in B20 which I believe should work. With
a makefile of:

  need1 := g:/a g:/b g:/c g:/d g:/e g:/f

  all1 : $(need1)

  $(need1) : % :
	  @echo $@

  need2 := //g/a //g/b //g/c //g/d //g/e //g/f

  all2 : $(need2)

  $(need2) : % :
	  @echo $@

When I run "make all1" I get.

  g:/a
  g:/b
  g:/c
  g:/d
  g:/e
  g:/f

When I run "make all2" I get.

  make: *** No rule to make target `//g/a', needed by `all2'.  Stop.

If you use -p option to look at what is going on you will find that make
seems to be incorrectly concatenating adjacent targets together when "//g"
is used instead of "g:".

  all2: //g/a //g/b //g/c //g/d //g/e //g/f
  #  Command-line target.
  #  Implicit rule search has been done.
  #  File does not exist.
  #  File has not been updated.

  //g/a //g/b:
  #  Implicit rule search has not been done.
  #  Implicit/static pattern stem: `//g/a //g/b'
  #  Modification time never checked.
  #  File has not been updated.
  #  commands to execute (from `foo.mk', line 13):
	  @echo $@

Since the rule which is set up seems to have a target of "//g/a //g/b",
there is no separate targets for either "//g/a" or "//g/b" and thus make
doesn't know how to build them, or something like that.

-- 
Graham Dumpleton ([email-masked])