Thank you! 

It makes sense to use share/petsc/Makefile.user - I will try to understand it. 
However, can you please tell me what is the meaning of "_SINGLE" in 
"PETSC_COMPILE_SINGLE"? Does it mean compile only one source file?

Best regards,
Alex Koshkarov.

On 12/15/20, 9:25 AM, "Satish Balay" <[email protected]> wrote:

    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

    Satish


    > 
    > 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 $@
    > 
    > 

Reply via email to