내 간단한 Makefile은 다음과 같습니다.
.exe 실행: 링크 gcc link.o -o 실행 link.o: main.o fun.o ld -r main.o fun.o -o link.o main.o: main.c gcc -c 메인.c -o 메인.o fun.o: 함수 file.c gcc -c functionfile.c -o fun.o 깨끗한: 델*.o *.exe 삭제
문제는 실제로 "run.exe"를 생성하는 것에 관한 것이 아닙니다. 이를 생성하는 방법에는 여러 가지가 있다는 것을 알고 있습니다. 그런데 **Makefile**을 작성할 때 실수로 "run.exe"에 의존하는 "link" 뒤에 ".o"를 쓰는 것을 잊어버렸습니다. 가리키다):
gcc -c main.c -o main.o
gcc -c functionfile.c -o fun.o
ld -r main.o fun.o -o link.o
cc link.o -o link
process_begin: CreateProcess(NULL, cc link.o -o link, ...) failed.
make (e=2): The system cannot find the file specified.
<builtin>: recipe for target 'link' failed
make: *** [link] Error 2
찾을 수 없다고 말하는 파일은 link
이전에 존재하지 않았고 파일을 생성하는 Makefile 명령이 없었기 때문인 것 같습니다. 내 질문은 link
대상 2, 3, 4에 대한 명령을 찾을 수 없는 경우 어떻게 성공적으로 실행하고 해당 .o
파일을 만들 수 있느냐는 것입니다. link
명령을 실행하지 않고 ie를 찾을 수 없는 경우에도 반환되지 않는 이유는 무엇 입니까? 제 추측이 맞거나 틀렸다면 정리해주시고 실제로 무슨 일이 일어나고 있는지, 무엇이 문제인지 알려주세요! ! ? recipe for target 'link' failed
이름이 지정된 대상이 없기 때문에 이것은 무엇입니까 link
?
답변1
문제는 첫 번째 줄에서 발생합니다 Makefile
.
run.exe: link
이로 인해 Make는 It을 생성하는 방법을 알아내려고 합니다 link
.link
짓는 방법을 알아라link.o
이므로 제공된 규칙을 사용하여 생성 link.o
한 다음 link
참조하는 기본 제공 규칙을 사용하여 생성을 시도합니다 cc
. 그러나 명령이 없으므로 cc.exe
실패합니다. 그리고 그것은 누락된 파일입니다. 이 모든 내용은 "<builtin>: Recipe for target 'link' failed" 오류 메시지를 설명합니다. link
기본 제공 규칙을 사용하여 생성하는 동안 Make가 실패했습니다.
이 문제를 해결하려면 올바른 필수 구성 요소를 지정하세요.
run.exe: link.o
gcc $^ -o $@
이는 규칙에서 정보의 중복을 피하기 위해 자동 변수를 사용합니다: $^
"모든 전제 조건"( link.o
), $@
"대상 파일 이름"( run.exe
).