c – 在我的用户定义的makefile中的makefile上使用PETSc
作者:互联网
我是PETSc的新人.我有一个很大的C代码,我想将PETSc添加到我已经拥有的一些文件中,所以我必须以一种可以编译PETSc的方式更改我的makefile.
是否有可能有两个不同的makefile,然后在我自己的makefile中调用PETSc makefile?如果是的话,我怎么能这样做?
有没有人有任何将PETSc链接到他们自己的代码的经验?
顺便说一句,我使用Linux作为我的操作系统.
解决方法:
编辑:虽然这是一个老帖子,但我确信仍有人在努力解决这个问题.
此外,对于petsc 3.6.x(和slepc 3.6.x),事情显然略有改变.
我目前在我的ubuntu 14.04 LTS makefile中使用以下行来获取F90文件(使用petsc 3.6.1和slepc 3.6.0):
# PETSC and SLEPC directories
PETSC_DIR = /opt/petsc-3.6.1
SLEPC_DIR = /opt/slepc-3.6.0
include $(PETSC_DIR)/lib/petsc/conf/variables
include $(SLEPC_DIR)/lib/slepc/conf/slepc_variables
使用这个,我可以构建
# Compiler command
COMPILE = $(COMP_DIR) $(COMP_FLAGS) $(PETSC_FC_INCLUDES) $(SLEPC_INCLUDE)
其中COMP_DIR必须手动设置(例如COMP_DIR = /usr/bin/mpif90或COMP_DIR = /usr/bin/gfortran),COMP_FLAGS是附加标志(例如’-g O0′),以及
# Link command
LINK = $(LINK_DIR) &(LINK_FLAGS)
其中LINK_DIR必须手动设置(例如/usr/bin/g),LINK_FLAGS包含其他标志(例如-fPIC).
然后可以使用它们来创建编译F90文件的规则(我确信C非常相似):
%.o : %.f90
$(COMPILE) -c $<
和主程序:
main: $(ObjectFiles) main.o
$(LINK) -o $@ $(ObjectFiles) main.o $(LINK_LIB) $(PETSC_LIB) $(SLEPC_LIB)
其中ObjectFiles包含项目中所有文件的列表,LINK_LIB对应于其他链接(例如-lgfortran).
这对我来说很好,但总是欢迎改进建议.
原帖:
而不是Divakar描述的hack,您可以通过运行轻松找到链接标志和包含目录以进行编译
make getlinklibs
make getincludedirs
在主要的petsc目录中,如here所述……
标签:c,linux,makefile,include-path,petsc 来源: https://codeday.me/bug/20190725/1531740.html