2016-12-02 6 views
0

Итак, я написал программу для вычисления шифрования Цезаря, но я думаю, что это не имеет большого значения - какая материя заключается в том, что когда я пытаюсь сделать make, компилятор или кто проверяет синтаксис моего make-файла, это ошибка говорит:makefile делает странную ошибку

make: *** Нет правила, чтобы цель была «чистой», необходима «PHONY». Стоп.

В моем каталоге у меня есть 5 файлов:

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

и Makefile выглядит следующим образом:

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 

Makefile, следует очистить объекты файлов при вводе make clean и линии $(wildcard $(EXTRA_SRCS)) должны проверяет, имеет ли файл c файл заголовка (парсер и цезер, а не основной). Я использую Ubuntu 15.10 и, пожалуйста, помогите мне :)

+10

'PHONY: all clean.' удалить период после очистки (и должен быть период * до * фальшивый:' .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

На самом деле это не проблема в вопросе, который является тривиальной опечаткой. –

Смежные вопросы