bug-make
[Top][All Lists]
Advanced

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

Re: addsuffix influence...


From: Paul Smith
Subject: Re: addsuffix influence...
Date: Fri, 29 Mar 2019 08:50:13 -0400
User-agent: Evolution 3.30.1-1build1

On Fri, 2019-03-29 at 12:55 +0800, 積丹尼 Dan Jacobson wrote:
> OK you're right. But why is what is on line A influencing this when we
> are trying to make B?
> $ cat makefile
> D=X_X_X_X
> N=noise
> L=light
> A:$D/$(addsuffix .kmz, $L $N)
> B:$D/$L.kmz $D/$N.kmz
> %.kmz:%.kml; minizip -o $@ $?
> %.kml:%.kml0; fgrep -v '?xml' $? > $@
> %.kml0: n input.txt; mode=$* ./n input.txt > $@
> $D/%:%; cp -a $? $@
> $ touch n input.txt
> $ cat makefile |sed /A/s/add/xxx/| make -f - -n B|sed $\!d
> rm noise.kml noise.kmz noise.kml0 light.kml light.kmz light.kml0
> $ cat makefile |                   make -f - -n B|sed $\!d
> rm noise.kml noise.kml0 light.kml light.kmz light.kml0

It's too hard to decipher a wall of code like that.  Please break your
question down into a simple example so people don't have to spend 10
minutes trying to understand it.

I didn't think about it too hard; however, the most likely reason for
the difference is that when you modify the function to be xxxsuffix
(which expands to the empty string) the rule evaluates to:

  A:X_X_X_X/

whereas when the addsuffix exists the rule expands to:

  A:X_X_X_X/noise.kmz light.kmz

Even though you don't run that rule, you've now declared two new
targets that weren't there before.

Since the difference you're pointing to is the "rm" which happens as
part of cleanup of intermediate files, mentioning new targets in the
makefile can definitely impact which files are considered intermediate.

See https://www.gnu.org/software/make/manual/html_node/Chained-Rules.html




reply via email to

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