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.
我犯了什么错误以及如何解决它。
答案 0 :(得分:17)
我认为你的makefile在你的机器和帖子之间出现乱码,但我认为有一个简单的解决方法可以解决:
all: $(SOURCES)
那将(可能)解决问题并使错误消失 - 如果这就是你想要的那么你可以停止阅读。但这个makefile仍有问题,所以我们可以做一些改进。
首先,进行一些调整,使其与我认为你的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(因为它并没有真正创建一个名为“all”的文件),并引入自动变量以使TARGET
规则更健壮,更少冗余:
.PHONY: all
all: $(TARGET)
$(TARGET): $(SOURCES)
$(CC) $< -o $@
如果您的代码库变得更复杂,还有更多要了解的内容,但现在这样做。
答案 1 :(得分:1)
只做&#34;干净&#34;清理所有链接,然后再次运行make。一切都应该是好的。
答案 2 :(得分:0)
我的问题是我在同一行上有名字和命令。制作:确定您使用制表符而不是空格。 (没有双关语)
之前(破碎)
build: docker build...
在
build:
docker build...