help-gnu-utils
[Top][All Lists]
Advanced

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

[GNU Make] Generic phony rules


From: * Tong *
Subject: [GNU Make] Generic phony rules
Date: 22 Mar 2007 14:50:48 GMT
User-agent: pan 0.119 (Karma Hunters)

My OP:

I have the following make file:

-------------------------------------------
all: something else

.PHONY: MakeAppleJuice MakeOrangeJuice MakeTomatoJuice

MakeAppleJuice:
        make_juice Apple.in.source  Apple.in.condition
                                                    
MakeOrangeJuice:                                    
        make_juice Orange.in.source Orange.in.condition 
                                                    
MakeTomatoJuice:                                    
        make_juice Tomato.in.source Tomato.in.condition 
-------------------------------------------

Is there anyway to combine the 3 rules into one? I hope there is, because
the 3 rules only different in what files they use and what juices then make
(but I still need the 3 phony targets). 

On Thu, 22 Mar 2007 12:47:15 +0000, * Tong * wrote:

> On Wed, 21 Mar 2007 23:33:30 -0500, Jean-Rene David wrote:
> 
>> If you want to get the effect of .PHONY, there's another
>> trick:
>> 
>> FORCE:
>> Make%Juice: %.in.source FORCE
>>      make_juice $*.in.source $*.in.condition
> 
> Thanks for the reply. I still can't get it working:
> 
> $ cat Makefile 
> make_juice := echo
> 
> all: something else
> 
> .PHONY: MakeAppleJuice MakeOrangeJuice MakeTomatoJuice
> 
> FORCE:
> Make%Juice: %.in.source FORCE
>         make_juice $*.in.source $*.in.condition 
> 
> #MakeAppleJuice:
> 
> $ make MakeAppleJuice
> make: Nothing to be done for `MakeAppleJuice'.
> 
> If the last "MakeAppleJuice:" is uncommented, It still won't work. My make
> is:
> 
> $ make --version
> GNU Make 3.81
> 
>>> Which shouldn't be, because AppleJuice is a phony target.
>> 
>> Quite the opposite. In light of the above, if you remove the
>> target from the phonies, it works.
> 
> I don't quite understand this. You mean do a 'rm <target>' as the make rule? 
> 
> This is what I tried also:
> 
> $ rm -v Apple.in.*
> removed `Apple.in.condition'
> removed `Apple.in.source'
> 
> $ make MakeAppleJuice
> make: Nothing to be done for `MakeAppleJuice'.
> 
> I read quite a lot, but just can't apprehend enough to make it works.

I just tried "Empty Target Files" trick, 
http://www.gnu.org/software/autoconf/manual/make/Empty-Targets.html#Empty-Targets

-----------------------------------------------------------
$ cat Makefile 
make_juice := echo

all: something else

MakeJuice: $(wildcard *.in.source)
        $(make_juice) $? $(addsuffix .in.condition, $(patsubst 
%.in.source,%,$?))
        touch MakeJuice

$ make MakeJuice
echo Orange.in.source Tomato.in.source Orange.in.condition Tomato.in.condition
Orange.in.source Tomato.in.source Orange.in.condition Tomato.in.condition
touch MakeJuice

$ make MakeJuice
make: `MakeJuice' is up to date.
-----------------------------------------------------------

But that's different than my OP, because I need to deal with each juice
explicitly, and the command format is strictly 

 make_juice $*.in.source $*.in.condition 

So, is it possible to have such generic phony rule?

Thanks

-- 
Tong (remove underscore(s) to reply)
  http://xpt.sf.net/techdocs/
  http://xpt.sf.net/tools/

-- 
Posted via a free Usenet account from http://www.teranews.com



reply via email to

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