Its internal organization of some old code. Previously we had 2 things:
- PETSC_COMPILE (perhaps PETSC_COMPILE_MULTIPLE is a more appropriate name) did something equivalent to 'gcc -c a.c b.c c.c' - i.e compile multiple files at the same time. - PETSC_COMPILE_SINGLE used was to compile one file at a time. [gcc -c a.c] Some of the old build infrastructure that uses PETSC_COMPILE is no longer used and removed [ i.e make target 'libfast'] And somehow the remaining *_SINGLE targets had this error [i.e PETSC_COMPILE was used incorrectly instead of PETSC_COMPILE_SINGLE] which got fixed. Satish On Tue, 15 Dec 2020, Alex Koshkarov wrote: > 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 $@ > > > > > >
