首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非递归约束目标

非递归约束目标
EN

Stack Overflow用户
提问于 2015-06-17 16:47:59
回答 2查看 86关注 0票数 1

基于本论文,我尝试将构建系统的一个子集重新加工成非递归的。实际上效果很好。默认情况下,我通过模板拥有部分makefile include所有相关目录:

代码语言:javascript
复制
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,一篇论文,所有这些都能工作。

代码语言:javascript
复制
$ make # does the right thing

但是,我希望为用户提供生成这些目录子集的能力。我知道我可以将DIRECTORIES定义为:

代码语言:javascript
复制
DIRECTORIES ?= dirA ...

因此:

代码语言:javascript
复制
$ make DIRECTORIES="dirB dirF"

很管用。但是是否有一种方法来编写我的makefile:

代码语言:javascript
复制
$ make -j12 dirB dirF

会做同样的事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-17 16:53:16

假设您有要构建的目标的每个目录变量(例如,TGT_dirBTGT_dirF等)那么,做你想做的事情就像添加以下内容一样简单:

代码语言:javascript
复制
$(eval $(DIR): $(TGT_$(DIR)))

对于foreach循环,如下所示:

代码语言:javascript
复制
$(eval $(call import_template,$(DIR)))$(eval $(DIR): $(TGT_$(DIR)))

将所有每个目录目标添加为目录目标的先决条件。

加上

代码语言:javascript
复制
.PHONY: $(DIRECTORIES)

在makefile的某个地方,以确保实现这些都是虚假的目标,而实际上并不意味着目录本身。

票数 1
EN

Stack Overflow用户

发布于 2016-08-27 17:17:19

我建议您使用非递归的prorab构建系统。

它允许您在每个目录中都有独立的makefile,同时拥有一个用于所有内容的主生成文件。因此,您可以通过cd'ing到右子目录并调用make来构建项目树的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30897670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档