And*_*rew 2 compiling source make mpi
我是 Linux 新手,我正在尝试编译名为DL_POLY_Classic 的科学软件。我下载了 zip 文件dl_class_1.6.tar.gz并使用命令将其解压缩tar xvzf dl_class_1.6.tar.gz
。它为我提供了一系列文件夹,其中包含用于程序操作的各种文件,这些文件在程序手册中进行了描述。其中一个名为source 的目录包含许多.f文件等。该手册说要编译代码,需要采用示例/模板 Makefile 之一并修改其中的路径以引导make
程序到包含编译器的适当目录。(这个 DL_POLY_Classic 程序是用 Fortran [Fortran 90,我相信]编写的,并且必须用它编译。)
根据一位同事的建议,我尝试使用集群上的 Intel Fortran 编译器 (ifort) 编译此代码。我修改了模板 Makefile 中的目标之一;这个目标现在在 Makefile 中有以下文本:
#========== mpich-c2
mpich-c2: dpp
cp /opt/mpich/ch-p4/include/mpif.h mpif.h
$(MAKE) LD="/opt/mpich_intel/ch-p4/bin/mpif90 -O3 -o" \
LDFLAGS="-L/opt/mpich_intel/ch-p4/lib64 -lmpich" \
TIMER="" \
FC=/opt/intel_fc_80/bin/ifort \
FFLAGS="-c " \
MPICH_F90="/opt/mpich_intel/ch-p4/bin/mpif90" \
CPFLAGS="-D$(STRESS) -DMPI -P -D'pointer=integer'\
-I/opt/mpich_intel/ch-p4/include" \
EX=$(EX) BINROOT=$(BINROOT) $(TYPE)
Run Code Online (Sandbox Code Playgroud)
我按照手册的指示将Makefile 放在源目录中。然后在源目录中,我键入命令:
make mpich-c2
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息:
cp /opt/mpich/ch-p4/include/mpif.h mpif.h
make LD="/opt/mpich_intel/ch-p4/bin/mpif90 -O3 -o" \
LDFLAGS="-L/opt/mpich_intel/ch-p4/lib64 -lmpich" \
TIMER="" \
FC=/opt/intel_fc_80/bin/ifort \
FFLAGS="-c " \
MPICH_F90="/opt/mpich_intel/ch-p4/bin/mpif90" \
CPFLAGS="-DSTRESS -DMPI -P -D'pointer=integer'\
-I/opt/mpich_intel/ch-p4/include" \
EX=D.X BINROOT=./ 3pt
make[1]: Entering directory `/export/home/myusername/dlc1_16/dl_class_1.6/source'
make[1]: *** No rule to make target `dl_params.inc', needed by `angfrc.o'. Stop.
make[1]: Leaving directory `/export/home/myusername/dlc1_16/dl_class_1.6/source'
make: *** [mpich-c2] Error 2
Run Code Online (Sandbox Code Playgroud)
所以,make
程序告诉我有No rule to make target dl_params.inc, needed by angfrc.o.
我的问题是,软件告诉我什么?可能是说它找不到文件dl_params.inc,还是可能说它找不到文件angfrc.o?或者,是不是说我的 Makefile 中应该有某种命令来创建一个名为dl_params.inc的新文件?
当我在我的 Makefile 中搜索时(正如我提到的,它本质上正是作者提供的模板,但只是mpich-c2
针对我有权访问的特定 Fortran 编译器修改了目标条目中的目录),我只看到这些提及的dl_params.inc:
# Declare dependency on parameters file
$(OBJ_ALL): dl_params.inc
$(OBJ_RRR): dl_params.inc
$(OBJ_4PT): dl_params.inc
$(OBJ_RSQ): dl_params.inc
$(OBJ_NEU): dl_params.inc
$(OBJ_RIG): dl_params.inc
$(OBJ_EXT): dl_params.inc
$(OBJ_SPME): dl_params.inc
$(OBJ_HKE): dl_params.inc
Run Code Online (Sandbox Code Playgroud)
我不确定这意味着什么。
另一方面,当我在我的 Makefile 中搜索angfrc.o 时,我只看到一个提及,在下面的第一行(之后OBJ_ALL
):
# Define object files
#=====================================================================
OBJ_ALL = angfrc.o bndfrc.o cfgscan.o corshl.o coul0.o coul4.o \
coul2.o coul3.o conscan.o dblstr.o dcell.o diffsn0.o \
diffsn1.o dlpoly.o duni.o error.o ewald1.o ewald3.o \
exclude.o exclude_atom.o fldscan.o exclude_link.o forces.o\
exitcomms.o extnfld.o fbpfrc.o fcap.o freeze.o gauss.o \
gdsum.o getrec.o gimax.o gisum.o gstate.o images.o initcomms.o \
intlist.o intstr.o invert.o invfrc.o jacobi.o lowcase.o lrcmetal.o \
lrcorrect.o machine.o merge.o merge1.o merge4.o \
npt_b1.o npt_b3.o parset.o npt_h1.o npt_h3.o nve_1.o \
nvt_b1.o nvt_e1.o nvt_h1.o parlst_nsq.o parlink.o parlst.o passcon.o \
passpmf.o pmf_1.o pmf_shake.o primlst.o quench.o rdf0.o rdf1.o \
rdshake_1.o result.o revive.o scdens.o shellsort.o shlfrc.o \
shlmerge.o shlqnch.o shmove.o simdef.o splice.o static.o strip.o \
strucopt.o sysdef.o sysgen.o systemp.o sysbook.o sysinit.o \
tethfrc.o thbfrc.o timchk.o traject.o vertest.o vscaleg.o \
warning.o xscale.o zden0.o zden1.o \
Run Code Online (Sandbox Code Playgroud)
我也不确定这意味着什么。
有趣的是,当我使用该find
命令按名称进行搜索时——例如find -name angfrc.o
,find -name *.o
, 和find -name dl_params.inc
-- 在具有这些名称的程序目录中的任何地方都找不到任何内容。当我尝试时find -name *.inc
,我确实发现源目录中存在一个文件comms.inc。这个特定文件在其标题中说它是“用于 MPI、PVM 和 SHMEM 的 dl_poly 包含文件”。这是一个相对较短的文件(只有 42 行长),它似乎同时包含“消息标签参数”和“MPI 标签大小”——尽管我真的不知道我应该寻找什么在那里。
如果你有时间,你能不能给我建议我接下来应该尝试什么?我不太确定错误消息No rule to make target dl_params.inc, needed by angfrc.o.
告诉我什么;你有什么想法?非常感谢您的宝贵时间。
错误消息No rule to make target dl_params.inc, needed by angfrc.o.
意味着,Makefile 将文件指定dl_params.inc
为构建文件的依赖项angfrc.o
。所以你必须以某种方式找到或创建dl_params.inc
文件。
搜索文档表明,该文件应包含 DL_POLY 所需的 FORTRAN 参数。的用户手册中第7.1.1节说明,应该有一个utility
包含程序的子文件夹PARSET
,可用于产生这样的参数文件(称为new_params.inc
默认情况下)。您可能只需要将new_params.inc
文件重命名为dl_params.inc
并将其放在主源文件夹中。
如果错误仍然存在,那么 Makefile 显然需要dl_params.inc
其他地方的文件,您必须仔细查看 Makefile。
归档时间: |
|
查看次数: |
6676 次 |
最近记录: |