[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Inconsistent behaviour when building in parallel
From: |
Dirk Heinrichs |
Subject: |
Re: Inconsistent behaviour when building in parallel |
Date: |
Sat, 20 Jan 2007 17:35:02 +0100 |
User-agent: |
KMail/1.9.5 |
Am Samstag, 20. Januar 2007 16:12 schrieb Paul Smith:
> On Fri, 2007-01-19 at 20:01 +0100, Dirk Heinrichs wrote:
> > I'm using GNU make 3.81 (on Linux, if this is important) and see strange
> > behaviour in parallel builds with the following Makefile:
> >
> > file1.txt file2.txt: file.in
> > cat $< >file1.txt|tee file2.txt
> >
> > test: file1.txt file2.txt
> > cat $^ >$@
> >
> > In a normal build, make does the right thing:
> >
> > % make test
> > cat file.in >file1.txt|tee file2.txt
> > cat file1.txt file2.txt >test
> >
> > In case of a parallel build, the "cat ... | tee ..." command for
> > file[12].txt is executed twice, which should not happen:
> >
> > % make -j 2 test
> > cat file.in >file1.txt|tee file2.txt
> > cat file.in >file1.txt|tee file2.txt
> > cat file1.txt file2.txt >test
>
> Make is behaving correctly here. Multiple targets in a single rule does
> not mean "all these targets are built from one invocation of the rule".
> It means that each of these targets has the same prerequisites and rule,
> and will be built one at a time by running the rule. IOW, this:
>
> a b c : d e f ; command
>
> is identical to writing this:
>
> a : d e f ; command
> b : d e f ; command
> c : d e f ; command
>
> See the GNU make manual for details.
So if make behaves correctly in the parallel case, does this mean that the
non-parallel case is wrong?
Bye...
Dirk
pgpmyAq7dL0SH.pgp
Description: PGP signature