I usually instruct my co-workers to avoid making recipes along those lines as I consider it to be a form of painting yourself into a corner, though there are times where it's unavoidable.
In the build I maintain it used to have something like this:
> some command | sed 'some stuff' | some other command > blah.cc
> ${compiler and flags} blah.cc -o blah.o
There were a few problems with it:
* The 1st line of the recipe also produced a header as a side effect (hidden dependency)
* This won't fail the build: /bin/true | /bin/false | /bin/true. That can be changed if bash is the shell your build uses (.SHELL_FLAGS := -euo pipefail -c)
* Even if one command in that pipeline fails the build it might not be obvious what the failure was.
I changed it to (extensions changed to protect the innocent):
> some command > address@hidden
blah.x2 : blah.x1
> sed 'some stuff' > address@hidden
blah.cc : blah.x2
> some other command > address@hidden
blah.h : blah.cc
> no real recipe was provided, just adding this note for emphasis; this last part is how I suggest you solve it
-brian
On Wed, Dec 19, 2018 at 5:53 AM Renaud Pacalet <
address@hidden> wrote:
URL:
<https://savannah.gnu.org/bugs/?55243>
Summary: Request for a way to indicate that the same recipe
execution produces several targets
Project: make
Submitted by: pacalet
Submitted on: Wed 19 Dec 2018 12:53:09 PM UTC
Severity: 3 - Normal
Item Group: Enhancement
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Component Version: 4.2.1
Operating System: Any
Fixed Release: None
Triage Status: None
_______________________________________________________
Details:
This request for enhancement concerns cases where multiple targets are
produced by one single execution of a recipe.
I frequently encounter situations where a single recipe execution produces
several targets and I'd like make to know about all these targets.
I know there is a side-effect of pattern rules with several targets that leads
make to consider that all targets matched by one activation of the rule are
produced by a single execution of the recipe.
But exploiting this sometimes leads to clumsy Makefiles where pattern rules
are used without any other reason than this side effect. Moreover, building
the list of pattern targets is sometimes difficult.
It would be much more convenient to have a new type of rule dedicated to this
situation. For instance, a triple-colon rule:
a b c::: foo
touch a b c
Of course, there are several related questions, like, for instance:
0 the semantics of the $@ automatic variable (list of targets, first target in
the list, other?),
0 the existence or not of a corresponding (static) pattern rule,
0 ...
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?55243>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
_______________________________________________
Bug-make mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/bug-make