소스에서 프로그램을 빌드하려고 할 때 "make"가 규칙 누락에 대해 불평하는 이유는 무엇입니까?

소스에서 프로그램을 빌드하려고 할 때 "make"가 규칙 누락에 대해 불평하는 이유는 무엇입니까?

저는 Linux 초보자이고 다음과 같은 파일을 컴파일하려고 합니다.DL_POLY_클래식. zip 파일을 다운받았어요dl_class_1.6.tar.gz그리고 command 를 사용하여 압축을 푼다 tar xvzf dl_class_1.6.tar.gz. 프로그램 작동을 위한 다양한 파일이 포함된 일련의 폴더를 제공합니다.수동. 이 디렉토리 중 하나는원천많이 포함되어 있습니다. 에프서류 등 매뉴얼에는 코드를 컴파일하려면 예제/템플릿 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.oOBJ_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

오류 메시지는 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을 주의 깊게 살펴보아야 합니다.

관련 정보