[GRASS-dev] [grass-code I][359] GRASS fails to build with make -j3

Markus Neteler neteler at itc.it
Sun Jul 8 06:08:26 EDT 2007


On Thu, Apr 05, 2007 at 02:05:53PM +0100, Glynn Clements wrote:
> 
> grass-codei at wald.intevation.org wrote:
> 
> > code I item #359, was opened at 2007-04-05 12:01
> > Status: Open
> > Priority: 4
> > Submitted By: Maciej Sieczka (msieczka)
> > Assigned to: Nobody (None)
> > Summary: GRASS fails to build with make -j3 
> > Issue type: other bug
> > Issue status: None
> > GRASS version: CVS HEAD
> > GRASS component: build
> > Operating system: all
> > Operating system version: 
> > GRASS CVS checkout date, if applies (YYMMDD): 050407
> > 
> > 
> > Initial Comment:
> > On multi cpu machines it is possible to speed up compilation time
> > greatly using the -j switch with make (eg. -j3 for 2 cpus).
> > 
> > make -j3 works fine on my dual core Intel with all the software I'm
> > building from source (including eg. PROJ, GEOS, HDF4, POSTGIS, GDAL,
> > QT4).
> > 
> > But when I build GRASS with make -j3, plenty of errors crop out
> > after "Waiting for unfinished jobs...." information. In a result, no
> > single GRASS module is build properly. However, GRASS builds fine on
> > the same machine if -j3 is not used.
> > 
> > configure and make logs attached.
> 
> The first thing I notice is that the first error is usually a missing
> header file, e.g.:
> 
> copy.c:7:28: error: grass/datetime.h: No such file or directory
> 
> adj_cellhd.c:14:23: error: grass/gis.h: No such file or directory
> 
> This is due to the "headers" target in the "libs" directory being run
> in parallel with other jobs.
> 
> 
> This specific issue can probably be solved by changing lib/Makefile
> from:
> 
> 	default: headers subdirs
> to:
> 
> 	default: subdirs
> 
> 	subdirs: headers
> 
> This should prevent the subdirs target from being run before the
> headers target has completed.
> 
> However: I'm not sure whether parallel make will actually be useful
> with the existing Makefiles, due to the use of a shell "for" loop for
> building subdirectories:
> 
> 	subdirs:
> 		@list='$(SUBDIRS)'; \
> 		for subdir in $$list; do \
> 		    echo $$subdir ; \
> 		    $(MAKE) -C $$subdir || echo $(CURDIR)/$$subdir >> $(GRASS_HOME)/error.log; \
> 		done
> 
> [From include/Make/Dir.make]
> 
> To have the subdirectories built in parallel, you would need to use
> something like:
> 
> 	.PHONY: subdirs $(SUBDIRS)
> 
> 	subdirs: $(SUBDIRS)
> 
> 	$(SUBDIRS):
> 		$(MAKE) -C $@


I am interested to get this working but failed to get the
second part in include/Make/Dir.make successfully running.

Any further hints? My Makefile knowledge is fairly limited
unfortunately.

Markus




More information about the grass-dev mailing list