[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.7] docs/build: Work around apparent bug with multi-target rules
On 25/04/16 14:35, Ian Jackson wrote: > Andrew Cooper writes ("[PATCH for-4.7] docs/build: Work around apparent bug > with multi-target rules"): >> The `make` manual documents that a rule of the form >> >> target1 target2: prereq >> recipe >> >> is equivilent to >> >> target1: prereq >> recipe >> target2: prereq >> recipe >> >> This is correct if only target1 or target2 is wanted, but is not the >> case if both target1 and target2 are wanted to be rebuilt in the >> same pass. In such a case, executing the recipe to generate target1 >> causes the entire rule to be considered complete, short circuiting >> the search to regenerate target2. > This is not a bug in make. From the manual I have here (wheezy): > > Suppose you would like to vary the prerequisites according to the > target, much as the variable `$@' allows you to vary the commands. > You cannot do this with multiple targets in an ordinary rule, but > you can do it with a "static pattern rule". *Note Static Pattern > Rules: Static Pattern. But we don't want to vary the prerequisite with the target. We want the single (Patterned) prerequisite to cause a regeneration of each three of the (Patterned) targets using the same recipe, as the $@ and $< are sufficiently expressive for our needs. i.e. I only chose to do it like that originally to avoid copy&pasting the recipe. > > and (from `Pattern Intro'): > > Pattern rules may have more than one target. Unlike normal > rules, this does not act as many different rules with the same > prerequisites and commands. If a pattern rule has multiple > targets, `make' knows that the rule's commands are responsible for > making all of the targets. The commands are executed only once to > make all the targets. This is the bit of documentation that I missed. IMO, this is at least a documentation bug, and that the multi-target documentation should warning that multi-target pattern rules behave differently. `make' knows, does it... How can that possibly be the sensible choice? There is no automatic variable which encompasses multiple targets, and using $* still requires you to hand-code the non-stem parts of the targets. This smells like a bug which was documented around. > > So this is a bug in the Makefile. Your patch looks like a right > approach to me. A static pattern rule would be the other option. However, a static pattern rule wouldn't avoid the repetition of the recipe. > Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Thanks. I will see about adjusting the commit message, but the patch itself doesn't need to change. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |