2016-12-02 3 views
0

그래서 시저 암호를 계산하는 프로그램을 작성했지만 실제로 문제가 아닌 것 같습니다 - make 컴파일러를 수행하려고 할 때 또는 누가 내 메이크 파일의 구문을 검사하면 오류가 발생합니까? 라고 말합니다 :메이크 파일 이상한 오류가 발생합니다

make : *** 'PHONY'가 (가) '대상'을 '깨끗하게'만들 수있는 규칙이 없습니다. 중지.

내 디렉토리에

나는 5 개 개의 파일이 있습니다

main.c 
ceasar.c 
ceasar.h 
parser.c 
parser.h 

및 메이크 보이는 같은 :

PHONY : all clean. 
CFLAGS = -c -g -Wall 
CXXFLAGS = -o 
CC = gcc 
OBJECTS = main.o ceasar.o parser.o 
EXTRA_SRCS = ceasear.h parser.h 

all : ex1 

ex1 : $(objects) 
    $(CC) $(CXXFLAGS) ex1 $(objects) 
%.o : %.c $(wildcard $(EXTRA_SRCS)) 
    $(CC) $(CFLAGS) $< 

clean: 
    rm *.o 

make clean 및 라인 $(wildcard $(EXTRA_SRCS))를 입력 할 때 객체 파일을 청소해야하는 메이크해야 c 파일에 헤더 파일 (파서와 캐서, 메인이 아닌)이 있는지 확인합니다. 우분투 15.10을 사용하고 있습니다. 도와주세요.

+10

'PHONY : all clean.' 깨끗한 기간을 제거하십시오. (그리고 * * phony :'. PHONY' 전에) – joop

답변

1

일련의 작업을 실행하는 목적을 가진 가상의 대상 을 지정할 수 있습니다. 이 대상은 종속성을 지정하지 않고 명시 적으로 make 명령에 인수로 전달 된 경우에만 수행되도록 첫 번째 규칙으로 나타나서는 안됩니다. 가상 대상은 파일이 아니며 (파일이 존재하지 않음) 각 경우에 명령 실행을 시작하는 데 사용됩니다.

CFLAGS = -c -g -Wall 
CXXFLAGS = -o 
CC = gcc 
OBJECTS = main.o ceasar.o parser.o 
EXTRA_SRCS = ceasear.h parser.h 

all : ex1 

ex1 : $(objects) 
$(CC) $(CXXFLAGS) ex1 $(objects) 
%.o : %.c $(wildcard $(EXTRA_SRCS)) 
$(CC) $(CFLAGS) $< 

.PHONY: clean 

clean: rm *.o 

가상의 대상이 기존 파일에 의해 마스크 될 수 있습니다 있기 때문에주의 : 실수로 디렉토리에 대상이 종속성이 없기 때문에 파일이 다음 가상 대상의 같은 이름이라고 생성하고, 경우 파일이 이미 존재하면 해당 파일을 업데이트 할 필요가 없으며 명령 목록이 실행되지 않습니다.

+5

이것은 사소한 오타가있는 문제의 문제를 실제로 해결하지 못합니다. –

관련 문제