help-make
[Top][All Lists]
Advanced

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

Re: Command producing several targets at once


From: Britton Kerin
Subject: Re: Command producing several targets at once
Date: Wed, 26 Jul 2017 12:31:51 -0800

On Wed, Jul 26, 2017 at 9:31 AM, Paul Smith <address@hidden> wrote:
> On Wed, 2017-07-26 at 09:17 -0800, Britton Kerin wrote:
>> Another option if you don't like non-static pattern rules or the
>> special-case stuff involved, is to use a stamp file:
>>
>> yaccouts.stamp: parser.mly
>>         ocamlyacc $<
>
> I expect you want to add a "touch $@" to this recipe.

Yes, thx.  My bad should always test before post.

> And, this will only work if you have only on .mly file you need to
> build; if you have more than one you'll need to ensure the stamp file
> name is based on the .mly file name rather than "yaccouts.stamp".

Ok ok here's a more real-life version:

OCAMLYACC_STAMPS = $(patsubst %.mly,%.ocamlyacc.stamp,$(wildcard *.mly))

$(OCAMLYACC_STAMPS): %.ocamlyacc.stamp: %.mly
        ocamlyacc $<
        touch $@

>> Since .ml and .mli files are always produced together by the
>> sameprogram, they don't need individual nodes in your dependency
>> graph so you arrange yaccouts.stamp to represent them (and depend on
>> the stampfile in turn where needed).
>
> This works if you can ensure that all other references to parser.ml and
> parser.mli in the prerequisites lists in your makefile can be replaced
> with a reference to the .stamp file.
>
> But, it's not so simple if you have auto-generated prerequisites etc.
> where it's harder to control this.
>
> Also, this method doesn't take into account someone deleting either or
> both of the .ml or .mli files by hand but not touching the .stamp file.

True.  It's still worth it to avoid non-static pattern rules though IMO.

Britton



reply via email to

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