Ошибка Makefile: нет правила для создания цели - PullRequest
10 голосов
/ 03 мая 2011
SOURCES = server.c

TARGET = Server

CC = gcc

all: $(SOURCES) $(TARGET) 


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

clean:


rm -rf $(TARGET) 

Выше находится Makefile моего веб-сервера.Несмотря на то, что файл server.c находится в каталоге, выдается следующая ошибка

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

В чем заключается ошибка, которую я допустил и как ее исправить.

Ответы [ 3 ]

17 голосов
/ 04 мая 2011

Я думаю, что ваш make-файл искажен где-то между вашей машиной и почтой, но есть простое исправление, которое, я думаю, сработает:

all: $(SOURCES)

Это (вероятно) решит проблему и сделает ошибкууходи - если это все, что ты хочешь, тогда можешь перестать читать.Но все еще есть что-то не так с этим make-файлом , поэтому мы можем сделать еще несколько улучшений.

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

SOURCES = server.c

TARGET = Server

CC = gcc

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

clean:
    rm -rf $(TARGET) 

Первые три строки и правило clean в порядке, мы их проигнорируем.Теперь мы даем TARGET свое собственное правило и исправляем предпосылки:

all: $(TARGET)

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

Теперь мы создаем all PHONY (так как на самом деле он не создает файл с именем "all") и вводим автоматическийпеременные, чтобы сделать правило TARGET более устойчивым и менее избыточным:

.PHONY: all
all: $(TARGET)

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

Еще многое предстоит узнать, если ваша кодовая база усложняется, но пока это подойдет.

1 голос
/ 25 августа 2014

просто сделайте "make clean", чтобы очистить все ссылки, затем снова запустите make. Все должно быть хорошо.

0 голосов
/ 09 июля 2016

Мои проблемы были в том, что у меня было имя и команда в одной строке. Убедитесь: вы используете табуляцию, а не пробелы. (без каламбура)

ДО (сломанный)

build: docker build...

ПОСЛЕ

build:
        docker build...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...