make에서 "시스템이 지정된 파일을 찾을 수 없습니다" 문제의 정확한 원인은 무엇입니까?

make에서 "시스템이 지정된 파일을 찾을 수 없습니다" 문제의 정확한 원인은 무엇입니까?

내 간단한 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).

관련 정보