ソースからプログラムをビルドしようとすると、「make」がルールの欠落について文句を言うのはなぜですか?

ソースからプログラムをビルドしようとすると、「make」がルールの欠落について文句を言うのはなぜですか?

私はLinux初心者で、次のファイルをコンパイルしようとしています。DL_POLY_クラシック。 zipファイルをダウンロードしましたdl_class_1.6.tar.gzそしてcommandを使って解凍しますtar xvzf dl_class_1.6.tar.gz。プログラムを操作するためのさまざまなファイルを含む一連のフォルダを提供します。手動。これらのディレクトリの1つは源泉たくさん含まれています。 F文書などのマニュアルでは、コードをコンパイルするには、サンプル/テンプレートのMakefileの1つを取得してパスを変更して、プログラムをコンパイラを含むmake適切なディレクトリにリンクさせる必要があることを示しています。 (このDL_POLY_ClassicプログラムはFortranで書かれており、Fortran [Fortran 90と思います]を使用してコンパイルする必要があります。)

同僚の提案に従って、クラスタでIntel Fortranコンパイラ(ifort)を使用してこのコードをコンパイルしてみました。テンプレートMakefileでターゲットの1つを修正しました。これで、ターゲットの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.oOBJ_ALL、次の最初の行(次)には1つの言及しか表示されません。

# 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

エラーメッセージは、Makefileがファイルを構築するための依存関係としてNo rule to make target dl_params.inc, needed by angfrc.o.ファイルを指定していることを意味します。したがって、何らかの方法でそのファイルを検索または生成する必要があります。dl_params.incangfrc.odl_params.inc

文書を検索すると、ファイルにDL_POLYに必要なFORTRANパラメーターを含める必要があることがわかります。これユーザーマニュアルutilityセクション7.1.1は、そのようなパラメータファイル(デフォルトで呼び出される)を生成するために使用できるプログラムを含むサブフォルダがあることを説明します。ファイルの名前を変更してデフォルトのソースフォルダに配置します。PARSETnew_params.incnew_params.incdl_params.inc

エラーが続く場合、Makefileは明らかにdl_params.inc他の場所にファイルが必要なので、Makefileを注意深く見てください。

おすすめ記事