我是一名 Linux 新手,我正在尝试编译名为DL_POLY_经典。我下载了 zip 文件dl_class_1.6.tar.gz并使用命令解压缩它tar xvzf dl_class_1.6.tar.gz
。它为我提供了一系列文件夹,其中包含用于程序操作的各种文件,这些文件在程序中进行了描述手动的。这些目录之一称为来源包含许多。F文件等。该手册说,要编译代码,需要获取示例/模板 Makefile 之一并修改其中的路径,以将程序定向make
到包含编译器的适当目录。 (这个 DL_POLY_Classic 程序是用 Fortran 编写的,并且必须使用 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)
我将 Makefile 放在来源目录,按照手册的指示。然后当在来源目录下,我输入命令:
make mpich-c2
但是,我收到以下错误消息:
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
所以,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
我不确定这意味着什么。
另一方面,当我在 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 \
我也不确定这意味着什么。
有趣的是,当我使用find
命令按名称搜索时(例如,、、find -name angfrc.o
和find -name *.o
)find -name dl_params.inc
,我在程序目录中找不到任何具有这些名称的内容。当我尝试时find -name *.inc
,我确实发现了一个文件通讯公司存在于来源目录。这个特定文件在其标头中表示它是“MPI、PVM 和 SHMEM 的 dl_poly 包含文件”。这是一个相对较短的文件(只有 42 行长),并且似乎它包含“消息标签参数”和“MPI 标签大小”——尽管我并不真正知道我应该寻找什么在那里。
如果您有时间,能否请您给我一些建议,告诉我下一步应该尝试什么?我不太确定错误消息No rule to make target dl_params.inc, needed by angfrc.o.
告诉我什么;你有什么想法?非常感谢您的宝贵时间。
答案1
该错误消息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。