Makefile错误:没有规则来制作目标

Uda*_*age 10 makefile

SOURCES = server.c

TARGET = Server

CC = gcc

all: $(SOURCES) $(TARGET) 


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

clean:


rm -rf $(TARGET) 
Run Code Online (Sandbox Code Playgroud)

上面是我的Web服务器的Makefile.虽然server.c文件位于目录中,但这会导致出现错误

make: *** No rule to make target `Server', needed by `all'.  Stop.
Run Code Online (Sandbox Code Playgroud)

我犯了什么错误以及如何解决它.

Bet*_*eta 17

我认为你的makefile在你的机器和帖子之间出现了乱码,但是我认为有一个简单的解决方案可行:

all: $(SOURCES)
Run Code Online (Sandbox Code Playgroud)

这将(可能)解决问题并使错误消失 - 如果这就是你想要的那么你可以停止阅读.但是这个makefile仍然有问题,所以我们可以做一些改进.

首先,稍微调整一下,使其与我认为你的makefile真正说的相符:

SOURCES = server.c

TARGET = Server

CC = gcc

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

clean:
    rm -rf $(TARGET) 
Run Code Online (Sandbox Code Playgroud)

前三行和clean规则都没问题,我们会忽略这些.现在我们给出TARGET自己的规则并理顺先决条件:

all: $(TARGET)

$(TARGET): $(SOURCES)
    $(CC) $(SOURCES) -o $(TARGET) 
Run Code Online (Sandbox Code Playgroud)

现在我们制作allPHONY(因为它并没有真正创建一个名为"all"的文件),并引入自动变量来使TARGET规则更健壮,更少冗余:

.PHONY: all
all: $(TARGET)

$(TARGET): $(SOURCES)
    $(CC) $< -o $@ 
Run Code Online (Sandbox Code Playgroud)

如果您的代码库变得更复杂,还有更多要了解的内容,但现在这样做.