On Thu, Nov 26, 2009 at 10:03 AM, Eli Zaretskii <e...@gnu.org> wrote:
>> Date: Thu, 26 Nov 2009 07:42:33 -0600
>> From: Peng Yu <pengyu...@gmail.com>
>>
>> >        a: command.sh
>> >                ./command.sh
>> >        b: command.sh
>> >                ./command.sh
>> >
>> > So, in this case, there is only one target file each time command.sh is
>> > invoked, and the name of that target will be stored in $...@.  So the first
>> > time command.sh is invoked, $@ will be set to "a" and the second time it
>> > will be set to "b".
>>
>> I don't understand the following case. If there are two rules, why
>> command.sh is only executed once.
>>
>> $ touch command.sh
>> $ make
>> ./command.sh
>
> Because by default, Make only builds the first target in the Makefile,
> in this case a.  Try this, and you should see 2 invocations of
> command.sh:
>
>  $ touch command.sh
>  $ make a b
>
>> If there are multiple files that are generated by command.sh, are you
>> suggesting to write a single rule for an arbitrarily chosen single
>> file? But if I only have a rule for 'a' but not for 'b', when the file
>> 'b' is deleted, 'command.sh' will not called by make. But I do want
>> make to updated 'b'. How do you deal with this case?
>
> The only way AFAIK is to use static pattern rules, and come up with a
> pattern that will catch both a and b, but nothing else.

This solution seems awkward to me. There maybe not be a good pattern
that catch both a and b. Should gnu make have a more natural solution
to this problem?


_______________________________________________
Help-make mailing list
Help-make@gnu.org
http://lists.gnu.org/mailman/listinfo/help-make

Reply via email to