![소스에서 프로그램을 빌드하려고 할 때 "make"가 규칙 누락에 대해 불평하는 이유는 무엇입니까?](https://linux55.com/image/2934/%EC%86%8C%EC%8A%A4%EC%97%90%EC%84%9C%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84%20%EB%B9%8C%EB%93%9C%ED%95%98%EB%A0%A4%EA%B3%A0%20%ED%95%A0%20%EB%95%8C%20%22make%22%EA%B0%80%20%EA%B7%9C%EC%B9%99%20%EB%88%84%EB%9D%BD%EC%97%90%20%EB%8C%80%ED%95%B4%20%EB%B6%88%ED%8F%89%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
저는 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.inc
angfrc.o
dl_params.inc
문서를 검색하면 파일에 DL_POLY에 필요한 FORTRAN 매개변수가 포함되어야 함을 알 수 있습니다. 이것사용자 매뉴얼utility
섹션 7.1.1 에서는 그러한 매개변수 파일(기본적으로 호출됨)을 생성하는 데 사용할 수 있는 프로그램이 포함된 하위 폴더가 있어야 한다고 설명합니다 . 파일 이름을 바꾸고 기본 소스 폴더에 배치하면 됩니다.PARSET
new_params.inc
new_params.inc
dl_params.inc
오류가 지속되면 Makefile은 분명히 dl_params.inc
다른 곳에 파일이 필요한 것이므로 Makefile을 주의 깊게 살펴보아야 합니다.