Ошибка Makefile: нет правила для создания цели

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.

Какая ошибка я сделал и как ее решить.

Ответ 1

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

all: $(SOURCES)

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

Во-первых, небольшая настройка, чтобы она соответствовала тому, что я думаю, что ваш makefile действительно говорит:

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 (поскольку он действительно не делает файл с именем "все" ) и вводит автоматические переменные, чтобы сделать правило TARGET более надежным и менее избыточным:

.PHONY: all
all: $(TARGET)

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

Там вам больше узнать, будет ли ваша кодовая база сложнее, но пока это будет сделано.

Ответ 2

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

Ответ 3

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

ПЕРЕД (Разбитый)

build: docker build...

после

build:
        docker build...