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)
如果您的代码库变得更复杂,还有更多要了解的内容,但现在这样做.
| 归档时间: |
|
| 查看次数: |
39384 次 |
| 最近记录: |