首页 > 解决方案 > Makefile 没有创建目录

问题描述

老师给了我们这个makefile,用于编译两个C文件并将对象存储到一个名为object的目录中。它可以很好地编译程序,但是它不会将它们的对象存储到目录中,甚至也不会创建目录。不知道该怎么做,真的可以使用一些帮助。

这是我的制作文件

CC = clang
CFLAGS = -g -Wall

OBJDIR = object
HDRS = $(wildcard *.h)
SRCS = $(wildcard *.c)
OBJS = $(addprefix $(OBJDIR)/, $(SRCS:.c=.o))

.PHONY: all
all: client server 

# WARNING: must have a tab before each definition

$(OBJDIR)/client.o: client.c $(HDRS) $(OBJDIR)
    $(CC) $(CFLAGS) -c client.c -o object/client.o

$(OBJDIR)/server .o: server.c $(HDRS) $(OBJDIR)
    $(CC) $(CFLAGS) -c server.c -o object/server.o  

$(OBJDIR)/%.o: %.c $(HDRS) $(OBJDIR)
    $(CC) $(CFLAGS) -c $*.c -o object/$*.o

$(OBJDIR):
    mkdir $(OBJDIR)

.PHONY: clean
clean:
    rm -f $(TARGET) $(OBJS)

标签: cunixmakefile

解决方案


我所要做的就是将多个目标添加到 makefile 并将所有目标更改为目标

CC = clang
CFLAGS = -g -Wall 

# TODO: rename the target to something meaningful!
TARGET = client server

OBJDIR = object
HDRS = $(wildcard *.h)
SRCS = $(wildcard *.c)
OBJS = $(addprefix $(OBJDIR)/, $(SRCS:.c=.o))

.PHONY: all
all: $(TARGET)

# WARNING: *must* have a tab before each definition
$(TARGET): $(OBJDIR) $(OBJS)
    $(CC) $(CFLAGS) $(OBJDIR)/protocol.o $(OBJDIR)/$@.o  -o $@

$(OBJDIR)/%.o: %.c $(HDRS) $(OBJDIR)
    $(CC) $(CFLAGS) -c $*.c -o object/$*.o

$(OBJDIR):
    mkdir $(OBJDIR)

.PHONY: clean
clean:
    rm -f $(TARGET) $(OBJS)

推荐阅读