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

Make-让主Makefile将中间文件存储在特定类型的临时文件夹中,makefile,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 我正在尝试并行化构建,以加快构建服务器能够以

我有一个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\u TYPE}/
来存储中间文件?这将允许我并行运行调试和发布版本


谢谢。

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


通过一些进一步的技巧,您可以对两个构建都有一个规则,但这将是非常神秘的。

如果make的
ARCH
参数控制正在构建的体系结构,那么您不能在一个
make
调用中使用
-j
并行多个体系结构。使用
-j#
将并行化单个体系结构的目标构建,由
make all-j8 ARCH=XXXX
调用中的
ARCH
值控制。如果
makeall-j8arch=armhf
破坏了您的构建,那么您的makefile编写不正确。这一点也不奇怪,因为许多/大多数makefiles都不奇怪。@EtanReisner你是对的。我已经更新了我的问题。是否至少可以将调试版本和发布版本分离为单个arch?例如:
/.obj/armhf/release、.obj/armhf/debug
等,将中间对象存储在临时文件夹中,如
.obj/${ARCH}/${release\u TYPE}
?这样,我就不必在不同的arch和release类型的构建之间发出
makeclean
命令。非常感谢。这完全取决于makefile设置和规则的编写方式。这不是make可以自动为你做的事情。
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 $@