基于本论文,我尝试将构建系统的一个子集重新加工成非递归的。实际上效果很好。默认情况下,我通过模板拥有部分makefile include所有相关目录:
DIRECTORIES = dirA dirB ... etc ...
define import_template
dir := $(1)
include $(1)/Rules.mk
include Rules.mk
endef
$(foreach DIR,$(DIRECTORIES), \
$(eval $(call import_template,$(DIR)))) 这些includes建立了一个变量,比如TGT_BIN,一篇论文,所有这些都能工作。
$ make # does the right thing但是,我希望为用户提供生成这些目录子集的能力。我知道我可以将DIRECTORIES定义为:
DIRECTORIES ?= dirA ...因此:
$ make DIRECTORIES="dirB dirF"很管用。但是是否有一种方法来编写我的makefile:
$ make -j12 dirB dirF会做同样的事吗?
发布于 2015-06-17 16:53:16
假设您有要构建的目标的每个目录变量(例如,TGT_dirB、TGT_dirF等)那么,做你想做的事情就像添加以下内容一样简单:
$(eval $(DIR): $(TGT_$(DIR)))对于foreach循环,如下所示:
$(eval $(call import_template,$(DIR)))$(eval $(DIR): $(TGT_$(DIR)))将所有每个目录目标添加为目录目标的先决条件。
加上
.PHONY: $(DIRECTORIES)在makefile的某个地方,以确保实现这些都是虚假的目标,而实际上并不意味着目录本身。
发布于 2016-08-27 17:17:19
我建议您使用非递归的prorab构建系统。
它允许您在每个目录中都有独立的makefile,同时拥有一个用于所有内容的主生成文件。因此,您可以通过cd'ing到右子目录并调用make来构建项目树的一部分。
https://stackoverflow.com/questions/30897670
复制相似问题