所有编译的工件都在单独的目录中?

时间:2015-11-10 20:35:00

标签: c makefile

我想编写一个简单的Makefile,它可以在构建目录中创建所有*.o*.so和二进制文件,可能是build/

在Makefile中有这么简单的方法吗?我在Linux上,Ubuntu 14.04。

链接的问题将所有*.o个工件放在构建目录中,而不是可执行文件本身。为了清楚起见,我想点击make并将所有项目编译并存储在build/中。

1 个答案:

答案 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文档会告诉你关于它们的一切。