c - 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)
解决方案
我所要做的就是将多个目标添加到 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)
推荐阅读
- r - Ranger 预测数据框中每一行的类别概率
- appium - Appium 测试脚本错误:找不到“adb.exe”
- python-3.x - Python:从数据名列中获取唯一值的组合
- excel - 如何使用单元格属性进行复制?
- containers - 使用 Jena 解析 json-ld 文件,我没有看到 rdfs:container 信息通过
- twitter-bootstrap - 我如何在 1 个站点上使用 bootstrap4 cdn 和 mdbootstrap cdn
- mysql - 为什么mysql查询不使用索引
- r - 尝试在 R 中随时间绘制计数时,为什么会收到指向 Inf 值的错误消息?
- unity3d - Oculus Quest & Unity:手部追踪:以不同方式抓取物体
- python - 为当前文件夹中的所有文件(包括子文件夹中的所有文件)生成 MD5 哈希