[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Targets directory name concatenation strangeness
From: |
Martin Dorey |
Subject: |
RE: Targets directory name concatenation strangeness |
Date: |
Thu, 3 Aug 2017 16:53:22 +0000 |
You're trying to use an automatic variable in a scope where it doesn't have the
value you want. make -p is how I'd debug such:
address@hidden:~/tmp/benjamin-cama-2017-08-03$ cat Makefile
SUBDIR = $(@D)
$(SUBDIR)/target-%:
address@hidden:~/tmp/benjamin-cama-2017-08-03$ make -n -p 2>&1 | grep target- |
grep -v FEATURES
/target-%:
address@hidden:~/tmp/benjamin-cama-2017-08-03$
The documentation, specifically
https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html,
speaks directly to this case:
"It’s very important that you recognize the limited scope in which automatic
variable values are available: they only have values within the recipe. In
particular, you cannot use them anywhere within the target list of a rule; they
have no value there and will expand to the empty string."
-----Original Message-----
From: Bug-make [mailto:address@hidden On Behalf Of Benjamin Cama
Sent: Thursday, August 03, 2017 08:37
To: Edward Welbourne
Cc: address@hidden
Subject: Targets directory name concatenation strangeness
OK, new subject as this specific behavior gets stranger.
Le jeudi 03 août 2017 à 17:27 +0200, Benjamin Cama a écrit :
> Le jeudi 03 août 2017 à 15:06 +0000, Edward Welbourne a écrit :
> > Benjamin Cama (3 August 2017 17:00)
> > > Well, I tried:
> > >
> > > SUBDIR = $(dir $@)
> > > $(SUBDIR)/target-%:
> > > …
> > >
> > > But it doesn't work. But without a slash (which is already present at
> > > the end of $(SUBDIR)), it actually works!:
> > >
> > > SUBDIR = $(dir $@)
> > > $(SUBDIR)target-%:
> > > …
> > >
> > > Is this a bug?
> >
> > No: thing/target-suffix and thing//target-suffix are different names.
> > They may be functionally equivalent, but make just sees different
> > strings, one with a doubled-slash, the other with just one slash.
>
> Well, the thing is that passing target names to make with any number of
> slashes normalize it to one, so I tended to think that the definition
> followed the same normalization. Thanks for the explanation, then.
Still, when I try to concatenate the slashless directory name and the
file name with a slash in between, it does not work!:
SUBDIR = $(@D)
$(SUBDIR)/target-%:
echo $(SUBDIR)
does not work:
$ make foo/target-1234
make: *** No rule to make target 'foo/target-1234'. Arrêt.
Without the slash, it works:
$ make foo/target-1234
echo foo
foo
This looks very strange to me.
--
Benjamin Cama - Tél : 258
_______________________________________________
Bug-make mailing list
address@hidden
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.gnu.org%2Fmailman%2Flistinfo%2Fbug-make&data=01%7C01%7Cmartin.dorey%40hds.com%7C6f15570d18bf401e55ec08d4da8588aa%7C18791e1761594f52a8d4de814ca8284a%7C0&sdata=Rq8TZAAnciZ2lN87viZ%2Byqu1j3rA6LmSRnxtZaSId7g%3D&reserved=0
- Re: Target-specific variable in subdirectory problem, (continued)
Re: Target-specific variable in subdirectory problem, Paul Smith, 2017/08/02
Re: Target-specific variable in subdirectory problem, Benjamin Cama, 2017/08/03
Message not availableRe: Target-specific variable in subdirectory problem, Benjamin Cama, 2017/08/03
Targets directory name concatenation strangeness, Benjamin Cama, 2017/08/03
RE: Targets directory name concatenation strangeness,
Martin Dorey <=
Re: Targets directory name concatenation strangeness, Benjamin Cama, 2017/08/03
Re: Targets directory name concatenation strangeness, Kyle Rose, 2017/08/03
Fwd: Re: Target-specific variable in subdirectory problem, Sven C. Dack, 2017/08/03