2011-05-03 75 views
10
SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 


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

clean: 


rm -rf $(TARGET) 

以上就是我的Web服务器的Makefile文件。尽管server.c文件在目录中,但这给出了下面的错误:Makefile的错误:没有规则,使目标

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

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

+1

请问你的makefile真的像上面?如果没有,请编辑,直到两场比赛。如果是这样,请阅读makefile语法。 – 2011-05-03 19:45:15

+0

雅这是我的生成文件。这给了我上面的错误。 – 2011-05-03 19:51:49

回答

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假的(因为它并没有真正做一个名为“所有”文件),并推出自动变量,使TARGET规则更强大,更少冗余:

.PHONY: all 
all: $(TARGET) 

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

如果您的代码库变得更加复杂,但现在可以做到,还有更多需要了解的知识。

1

只是“使清洁”清理所有的链接,然后再次运行make。一切都应该很好。

0

我的问题是我的名字,并在同一行的命令。制作:确定您使用的是制表符而不是空格。 (没有双关语意)

BEFORE(碎)

build: docker build... 

build: 
     docker build... 
相关问题