2011-05-03 3 views
10
SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 


$(CC) $(SOURCES) -o $(TARGET) 

clean: 


rm -rf $(TARGET) 

위의 내용은 웹 서버의 Makefile입니다. server.c 파일이 디렉토리에 있지만 이것은 내가 만든 한 실수와 그 해결 방법입니다 무엇 fallowing 오류Makefile 오류 : 대상을 만들 규칙이 없습니다.

make: *** No rule to make target `Server', needed by `all'. Stop. 

에게 제공합니다.

+1

이 메이크 정말 위와 같이 보입니까 AFTER? 일치하지 않을 경우 두 개가 일치 할 때까지 수정하십시오. 그렇다면 makefile 구문을 읽어보십시오. –

+0

예. 이것은 제 메이크 파일입니다. 위의 오류가 발생합니다. –

답변

17

나는 당신의 메이크 컴퓨터와 포스트 사이 어딘가에 왜곡있어 생각하지만, 내가 일을 생각하는 간단한 수정이 :

all: $(SOURCES) 

(아마) 문제를 해결하고 오류가 갈 것 즉 어쨌든 그게 전부라면 그만하면 돼. 그러나 이 메이크 파일에 여전히 문제가있어 더 개선 할 수 있습니다.

첫째, 약간의 조정은 내가 당신의 메이크 진짜라고 생각하는 것과 일치로 만들려면 :

SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 
    $(CC) $(SOURCES) -o $(TARGET) 

clean: 
    rm -rf $(TARGET) 

처음 세 라인과 clean 규칙 모든 권리는, 우리는 사람들을 무시하는 것입니다. 이제 우리는 TARGET에게 자신의 규칙을주고 전제 조건 곧게 : 이제 우리는 (정말 "모든"이라는 파일을하지 않기 때문에), 그리고 TARGET 규칙을 만들기 위해 자동 변수를 소개 all 가짜을

all: $(TARGET) 

$(TARGET): $(SOURCES) 
    $(CC) $(SOURCES) -o $(TARGET) 

을 더 강력하고 덜 중복 :

.PHONY: all 
all: $(TARGET) 

$(TARGET): $(SOURCES) 
    $(CC) $< -o [email protected] 

코드베이스가 더 복잡해지면 배우는 것이 더 많지만, 지금은 그렇게 할 것입니다.

1

"make clean"을 실행하여 모든 링크를 지운 다음 make를 다시 실행하십시오. 모든 것이 잘되어야합니다.

0

내 문제는 같은 줄에 이름과 명령이 있었기 때문입니다. 확인 : 공백이 아닌 탭을 사용하고 있는지 확인하십시오. 전

을 (웃기려는 의도가 없으며) (브로큰)

build: docker build... 

build: 
     docker build... 
관련 문제