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 _______________________________________________ help-gnu-utils mailing list help-gnu-utils@gnu.org http://lists.gnu.org/mailman/listinfo/help-gnu-utils