[petsc-users] makefile for compiling multiple sources

Satish Balay balay at mcs.anl.gov
Fri Mar 18 11:11:53 CDT 2016


On Fri, 18 Mar 2016, Matthew Knepley wrote:

> On Fri, Mar 18, 2016 at 9:49 AM, Matthew Overholt <overholt at capesim.com>
> wrote:
> 
> > Hi,
> >
> >
> >
> > I’m just getting started with PETSc and have been able to configure and
> > run the examples, but as I’m starting to put together a more substantial
> > code with multiple source files I haven’t been able to find or create a
> > makefile which works and follows PETSc guidelines.
> >
> >
> >
> > I’ve configured and am building with the Intel compilers and MKL for blas
> > & lapack, as per the installation example, and with the C++ language.
> >
> 
> Use this:
> 
> CFLAGS     =
> CPPFLAGS   =
> LIBFILES   =
> TARGET     = femex1
> OBJFILES   = femex1.o shapes.o
> CLEANFILES = $(TARGET)
> 
> include ${PETSC_DIR}/lib/petsc/conf/variables
> include ${PETSC_DIR}/lib/petsc/conf/rules
> 
> all: $(TARGET)
> 
> $(TARGET) : $(OBJFILES)
>        ${CLINKER} -o $(TARGET) $(OBJFILES) ${PETSC_KSP_LIB}
> 
> 
> and do not mess around with putting in header file dependencies yourself,
> use https://ccache.samba.org/

Not sure how ccache helps with header dependencies. One can add in the dependencies
to the makefile

femex1.o: femex1.cpp lists.h shapes.h
shapes.o: shapes.cpp shapes.h

Satish

> 
>   Thanks,
> 
>     Matt
> 
> 
> > Here’s my makefile --------------------------------------
> >
> > #
> >
> > # makefile for femex1 - PETSc/kde/ex1.c adapted for FEA
> >
> > #
> >
> > # Usage: make all
> >
> > #        make clean
> >
> > #
> >
> > # PETSc was configured using the Intel Compilers, MKL, and C++
> >
> > #
> >
> > CFLAGS        =
> >
> > CPPFLAGS     =
> >
> > CLFLAGS      =
> >
> > LIBFILES      = ${PETSC_KSP_LIB}
> >
> > TARGET        = femex1
> >
> > CLEANFILES   = $(TARGET)
> >
> >
> >
> > include ${PETSC_DIR}/lib/petsc/conf/variables
> >
> > include ${PETSC_DIR}/lib/petsc/conf/rules
> >
> >
> >
> > OBJFILES = femex1.o \
> >
> >            shapes.o
> >
> >
> >
> > all: $(TARGET)
> >
> >
> >
> > $(TARGET) : $(OBJFILES) $(LIBFILES)
> >
> >        ${CLINKER} -o $(TARGET) $(OBJFILES) $(LIBFILES)
> >
> >
> >
> > # femex1.cpp has 'main' and PETSc calls
> >
> > femex1.o: femex1.cpp lists.h shapes.h  chkopts
> >
> >        ${PETSC_CXXCOMPILE} femex1.cpp
> >
> >
> >
> > # shapes.cpp does not have any PETSc calls
> >
> > shapes.o: shapes.cpp shapes.h
> >
> >        icpc -c shapes.cpp
> >
> >
> >
> > And here’s the result ------------------------------------
> >
> >
> >
> > [Matt at HPCL1 mycode]$ make all
> >
> > /opt/petsc/petsc-3.6.3/linux-gnu-intel/bin/mpicxx -c -wd1572 -g  -fPIC
> > -I/opt/petsc/petsc-3.6.3/include
> > -I/opt/petsc/petsc-3.6.3/linux-gnu-intel/include      femex1.cpp
> >
> > icpc -c shapes.cpp
> >
> > make: *** No rule to make target
> > `-Wl,-rpath,/opt/petsc/petsc-3.6.3/linux-gnu-intel/lib', needed by
> > `femex1'.  Stop.
> >
> >
> >
> > ---------------------------------------------------------------
> >
> > So it compiles the two sources, but then fails on the linking step.
> >
> >
> >
> > Thanks in advance.
> >
> > Matt Overholt
> >
> > CapeSym, Inc.
> >
> >
> > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient&utm_term=oa-2115-d> This
> > email is safe. www.avast.com
> > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient&utm_term=oa-2115-d>
> >
> 
> 
> 
> 


More information about the petsc-users mailing list