Make - 让Master Makefile在特定于类型的临时文件夹中存储中间文件

时间:2015-10-19 21:16:28

标签: makefile

我有500多行Makefile,用于处理各种自动构建。在当前状态下,它指定了一些规则,并依赖于传递给make的参数来确定要构建的体系结构,即:

all: release_build clean_all debug_build clean_all

因此,在我的构建服务器上,我可以为多个体系结构生成项目的tarball,如下所示:

make all ARCH=armhf
make all ARCH=x86
make all ARCH=x64

我正在尝试并行化构建,以加快构建服务器为我提供这些构建的输出的速度,因为CPU和IO方面,它未被充分利用。但是,这会导致havok,因为所有体系结构都对中间对象文件使用相同的命名方案。

有没有一种简单的方法让我的构建生成一个像.obj/${RELEASE_TYPE}/这样的中间文件夹来存储中间文件?这将让我以并行方式运行调试和发布版本

谢谢。

1 个答案:

答案 0 :(得分:2)

这听起来并不困难。 (我本可以发誓已经有这样的问题......)

OBJECTS := foo.o bar.o

OBJDIR := ./.obj/$(ARCH)

all: release_build debug_build

RELEASEOBJECTS := $(addprefix $(OBJDIR)/release/, $(OBJECTS))

release_build: $(RELEASEOBJECTS)
    do something with $^ to produce $@

DEBUGOBJECTS := $(addprefix $(OBJDIR)/debug/, $(OBJECTS))

debug_build: $(DEBUGOBJECTS)
    do something with $^ to produce $@

通过一些进一步的诡计,你可以为这两个版本制定一个规则,但它会非常神秘。