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

时间:2011-05-03 19:42:31

标签: 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.

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

3 个答案:

答案 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...