Поддержка переносимых сборочных файлов PETSc очень проста. Далее приведены три примера сборочных файлов. Первый представляет ``минимальный'' сборочный файл для поддержки одной программы, которая использует библиотеки PETSc. Наиболее важной строкой в этом файле является та, которая начинается с include:
CFLAGS =
FFLAGS =
CPPFLAGS =
FPPFLAGS =
include ${PETSC_DIR}/bmake/common/base
ex2: ex2.o chkopts
${CLINKER} -o ex2 ex2.o ${PETSC_LIB}
${RM} ex2.o
Отметьте, что переменная ${PETSC_LIB} (как указано в
строке компоновки в приведенном файле) определяет все различные библиотеки
PETSc в нужном порядке для правильной компоновки. Пользователи, которым
требуются только определенные библиотеки PETSc, могут применять
альтернативные переменные, например ${PETSC_SYS_LIB},
${PETSC_VEC_LIB}, ${PETSC_MAT_LIB},
${PETSC_DM_LIB},
${PETSC_SLES_LIB},${PETSC_SNES_LIB} или
${PETSC_TS_LIB}.
Второй пример сборочного файла управляет созданием нескольких примеров программ:
FFLAGS =
CPPFLAGS =
FPPFLAGS =
include ${PETSC_DIR}/bmake/common/base
ex1: ex1.o
-${CLINKER} -o ex1 ex1.o ${PETSC_LIB}
${RM} ex1.o
ex2: ex2.o
-${CLINKER} -o ex2 ex2.o ${PETSC_LIB}
${RM} ex2.o
ex3: ex3.o
-${FLINKER} -o ex3 ex3.o ${PETSC_FORTRAN_LIB}
${PETSC_LIB}
${RM} ex3.o
ex4: ex4.o
-${CLINKER} -o ex4 ex4.o ${PETSC_LIB}
${RM} ex4.o
runex1: -@${MPIRUN} ex1
runex2:
-@${MPIRUN} -np 2 ex2 -mat_seqdense -options_left
runex3: -@${MPIRUN} ex3 -v -log_summary
runex4: -@${MPIRUN} -np 4 ex4 -trdump
RUNEXAMPLES_1 = runex1 runex2
RUNEXAMPLES_2 = runex4
RUNEXAMPLES_3 = runex3
EXAMPLESC = ex1.c ex2.c ex4.c
EXAMPLESF = ex3.F
EXAMPLES_1 = ex1 ex2
EXAMPLES_2 = ex4
EXAMPLES_3 = ex3
include ${PETSC_DIR}/bmake/common/test
Здесь наиболее важной вновь является строка include, которая включает файлы, определяющие все переменные-макросы. Некоторые дополнительные переменные, которые можно использовать в сборочном файле, определяются следующим образом:
CFLAGS =
SOURCEC = sp1wd.c spinver.c spnd.c spqmd.c sprcm.c
SOURCEF = degree.f fnroot.f genqmd.f qmdqt.f rcm.f
fn1wd.f gen1wd.f genrcm.f qmdrch.f rootls.f fndsep.f
gennd.f qmdmrg.f qmdupd.f
SOURCEH =
OBJSC = sp1wd.o spinver.o spnd.o spqmd.o sprcm.o
OBJSF = degree.o fnroot.o genqmd.o qmdqt.o rcm.o
fn1wd.o gen1wd.o genrcm.o qmdrch.o rootls.o fndsep.o
gennd.o qmdmrg.o qmdupd.o
LIBBASE = libpetscmat
MANSEC = Mat
include ${PETSC_DIR}/bmake/common/base
Библиотека называется libpetscmat.a, а исходные файлы, которые добавляются в нее, указаны переменными SOURCEC (для файлов на C) и SOURCEF (для файлов на Фортране). Отметьте, что переменные OBJSF и OBJSC идентичны SOURCEF и SOURCEC соответственно, за исключением того, что в них использован суффикс .o, а не .c или .f. Переменная MANSEC указывает, что все справочные страницы, сгенерированные из исходных файлов, должны включаться в раздел Mat.