[petsc-users] makefile for compiling multiple sources
Matthew Overholt
overholt at capesim.com
Fri Mar 18 10:17:40 CDT 2016
Thank you, Matt, removing the library from the target dependencies did the trick.
Thanks also for the tip on ccache.
Matt…
From: Matthew Knepley [mailto:knepley at gmail.com]
Sent: Friday, March 18, 2016 11:04 AM
To: overholt at capesim.com
Cc: PETSc
Subject: Re: [petsc-users] makefile for compiling multiple sources
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/
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. <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient&utm_term=oa-2115-d> www.avast.com
--
What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160318/2ba77573/attachment.html>
More information about the petsc-users
mailing list