我有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}/
这样的中间文件夹来存储中间文件?这将让我以并行方式运行调试和发布版本
谢谢。
答案 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 $@
通过一些进一步的诡计,你可以为这两个版本制定一个规则,但它会非常神秘。