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