help-make
[Top][All Lists]
Advanced

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

Re: Multiple Results for One Dependency


From: Paul D. Smith
Subject: Re: Multiple Results for One Dependency
Date: Fri, 5 Jan 2001 15:41:33 -0500

%% "Derick" <address@hidden> writes:

  d> Hello... I was wondering if anyone could give me some insight
  d> (==help). I am writing a makefile that has a SINGLE command that
  d> generates multiple output files. The difficulty I am running into
  d> is that the command is executed for each dependency, where the
  d> command actually takes care of all of them in one run.

  d> Specifically (simplified greatly):

  d>    all: MyStuff.a

  d>    GENERATED_CXX=MyStuff.cpp MyStuff_skel.cpp

  d>    $(GENERATED_CXX) : MyStuff.idl
  d>            $(IDLGEN) $(IDLGENFLAGS) $<

That's what this syntax is defined to do; multiple targets in a single
rule don't specify all are made from a single invocation, they specify
that each target can be built using the same script (but individual
invocations).

IOW, this:

  foo bar: baz
            some command

is just syntactic sugar for this:

  foo: baz
            some command
  bar: baz
            some command

See the GNU make manual.

  d> with the usual %.o:%.cpp rule elsewhere. What ends up happening is that
  d> $(IDLGEN) is run twice (once for MyStuff.cpp, once for MyStuff_skel.cpp),
  d> where I only want it done once.

You have to use pattern rules for this.  GNU make (and only GNU
make) has a special feature where multiple patterns on the left-hand
side of a pattern rule means that a single invocation of the command
creates all the targets at once, just as you want:

  %.cpp %_skel.cpp : %.idl
          $(IDLGEN) $(IDLGENFLAGS) $<

  all: MyStuff.a

  GENERATED_CXX=MyStuff.cpp MyStuff_skel.cpp

  MyStuff.a : $(GENERATED_CXX:.cpp=.o)
        # archive them here

will do what you want.

Again, see the GNU make manual.

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <address@hidden>          Find some GNU make tips at:
 http://www.gnu.org                      http://www.paulandlesley.org/gmake/
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist



reply via email to

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