[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
- [GNU Make] Stem for phony target, * Tong *, 2007/03/21
- Message not available
- Message not available
- Message not available
- Message not available
- [GNU Make] Generic phony rules,
* Tong * <=