[GRASS5] Problem compiling 5.1
Aleksey Y Naumov
naumov at acsu.buffalo.edu
Thu Mar 14 01:55:50 EST 2002
Glynn,
thanks for the explanation, very clear as always.
Aleksey
On Thu, 14 Mar 2002, Glynn Clements wrote:
>
> Aleksey Naumov wrote:
>
> > I have a problem compiling grass5.1. As directed in INSTALL, I configure it
> > with grass5.0 head branch:
> >
> > CFLAGS="-g -Wall" ./configure --with-grass50=/home/Geo/GRASS/grass
> >
> > Then run 'make'. Here's the error:
> >
> > make[3]: Entering directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
> > make[3]: *** No rule to make target `-lpq', needed by
> > `/home/Geo/GRASS/grass51/dist.i686-pc-linux-gnu/etc/bin/cmd/d.mon'. Stop.
> > make[3]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon/cmd'
> > make[2]: *** [subdirs] Error 1
> > make[2]: Leaving directory `/home/Geo/GRASS/grass51/display/d.mon'
> > make[1]: *** [subdirs] Error 1
> > make[1]: Leaving directory `/home/Geo/GRASS/grass51/display'
> > make: *** [default] Error 1
> >
> > I guess '-lpq' must be the linking flag for Postgres library 'libpq', as
> > defined in Platform.make:
> > #PostgreSQL:
> > PQINCPATH = -I/usr/local/pgsql/include
> > PQLIBPATH = -L/usr/local/pgsql/lib
> > PQLIB = -lpq
> >
> > but looking thru the Makefiles I don't see how 'd.mon' is dependent upon
> > '-lpq', where is this specified?
> > I must be missing something in the Makefile logic or layout.
>
> d.mon/cmd/Makefile has:
>
> LIBES = $(DISPLAYLIB) $(RASTERLIB) $(VECTLIB) $(DBMILIB) $(GISLIB)
>
> include $(MODULE_TOPDIR)/include/Make/Module.make
>
> Module.make has:
>
> include $(MODULE_TOPDIR)/include/Make/Platform.make
> include $(MODULE_TOPDIR)/include/Make/Grass.make
>
> ...
>
> $(BIN_CMD)/$(PGM): $(ARCH_CMD_OBJS) $(LIBES)
> $(CC) $(LDFLAGS) -o $@ $(ARCH_CMD_OBJS) $(LIBES) $(MATHLIB) $(XDRLIB)
> @test -e $(BIN)/$(PGM) || ln $(ETC)/front.end $(BIN)/$(PGM)
>
> IOW, the program has $(LIBES) as dependencies.
>
> Grass.make has:
>
> VECTLIB = $(VECTRLIB) $(DIG2LIB) $(SHAPELIB) $(PQLIB) $(BTREELIB)
>
> $(PQLIB) comes from Platform.make, which is the new name for the
> (configure-generated) "head" file.
>
> So, $(VECTLIB) is only suitable for use in a rule's commands, not in
> its dependencies.
>
> The $(BIN_CMD)/$(PGM) rule in Module.make needs to be re-written, with
> $(LIBES) replaced by two separate variables: one for GRASS libraries
> (dependencies, specified using pathnames) and one for external
> libraries (not dependencies, specified using -L/-l switches).
>
> --
> Glynn Clements <glynn.clements at virgin.net>
>
>
More information about the grass-dev
mailing list