我想编写一个简单的Makefile,它可以在构建目录中创建所有*.o
,*.so
和二进制文件,可能是build/
。
在Makefile中有这么简单的方法吗?我在Linux上,Ubuntu 14.04。
链接的问题将所有*.o
个工件放在构建目录中,而不是可执行文件本身。为了清楚起见,我想点击make
并将所有项目编译并存储在build/
中。
答案 0 :(得分:0)
假设您使用GNU make,例如:
O ?= build
OBJS := $(patsubst %.c,$(O)/%.o,$(wildcard *.c))
SOS := $(O)/<you know better than me>
EXECS := $(O)/<you know better than me>
all: $(OBJS) $(SOS) $(EXECS)
$(OBJS): $(O)/%.o: %.c
mkdir -p $(O); \
$(CC) $(CFLAGS) -c $< -o $@
$(SOS): ...
$(EXECS): ...
应该接近你想要的。由于我不知道您要构建哪些*.so
和可执行文件以及如何构建,我只是指出构建*.o
的规则的可能性。应该很容易适应其他目标。
如果键入make
,则会创建build
子目录(如果该目录不存在)。如果您键入make O=foo
,将创建foo
子目录(如果它不存在)并使用而不是build
。
$(OBJS): $(O)/%.o: %.c
是静态模式规则。如果不够清楚,GNU make文档会告诉你关于它们的一切。