[petsc-users] Petsc makefile and PETSC_COMPILE variable

Satish Balay balay at mcs.anl.gov
Tue Dec 15 11:25:26 CST 2020

On Tue, 15 Dec 2020, Alex Koshkarov wrote:

> Hi All,
> I have been using trivial makefile (see below) for the code which uses petsc. The makefile relies on variable PETSC_COMPILE which disappeared in new petsc version (absent in 3.14.2, but present in 3.13.4). What would be the right way to fix the makefile? (should I use something like PETSC_COMPILE_SINGLE ?).

Yes - this change was a bugfix.

> Is it a very bad practice to use such makefile?

For most use cases the default targets work. However this usage [where sources and obj files are in different dirs] is not covered by them.

So - I think using such targets is appropriate.

There is also share/petsc/Makefile.user - which attempts to provide a portable way to create user makefiles [that don't rely on internals like PETSC_COMPILE_SINGLE] - but requires gnumake and pkgconfig


> p.s. sorry if this is a duplicate message, I believe I sent the first one to the wrong address.
> Thank you very much,
> Alex Koshkarov.
> Example of makefile, it assumes sources in “src” and creats objects in “objects”:
> CPP := $(wildcard src/*.c)
> DEP := $(wildcard src/*.h)
> OBJ := $(addprefix objects/,$(notdir $(CPP:.c=.o)))
> include ${PETSC_DIR}/lib/petsc/conf/variables
> include ${PETSC_DIR}/lib/petsc/conf/rules
> driver: $(OBJ)
>                 -${CLINKER} -o $@ $^ ${PETSC_LIB} ${EXTRALIBS} ${CFLAGS}
> objects/%.o: src/%.c $(DEP)
>                 ${PETSC_COMPILE} -c $< -o $@

More information about the petsc-users mailing list