首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Make配置为立即对坏目标失败

将Make配置为立即对坏目标失败
EN

Stack Overflow用户
提问于 2017-11-17 20:31:45
回答 1查看 181关注 0票数 0

我正在使用Make启动多个verilog编译器的构建。我只使用Make来利用-j标志。我的档案看上去像这样

代码语言:javascript
运行
复制
allfpga: fpga0 fpga1 fpga2 fpga3 fpga4 fpga5 fpga6

fpga0:
    cd fpgas/$(@)/build && $(MAKE)
fpga1:
    cd fpgas/$(@)/build && $(MAKE)
fpga2:
    cd fpgas/$(@)/build && $(MAKE)
fpga3:
    cd fpgas/$(@)/build && $(MAKE)
fpga4:
    cd fpgas/$(@)/build && $(MAKE)
fpga5:
    cd fpgas/$(@)/build && $(MAKE)
fpga6:
    cd fpgas/$(@)/build && $(MAKE)

我调用make -j2 allfpgamake -j2 fpga0 fpag3 fpga5 fpga6中的一个

但是,如果有一个错误(例如在我给fpag3的命令中),那么在第二个make中,系统将很高兴地花费几分钟的时间来构建,然后提前停止。

我的问题是,如果有些目标不是真正的目标,我如何才能一开始就停止呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-17 22:20:42

没有什么好的方法可以让你的所有被要求的目标“预先筛选”。在尝试构建目标之前,Make无法知道目标是否是可构建的(例如,可以使用模式规则或其他方法根据其他目标创建目标)。

但是,您可以这样做:

代码语言:javascript
运行
复制
ALLFPGAS := fpga0 fpga1 fpga2 fpga3 fpga4 fpga5 fpga6

# Get any command line goal which is not one of ALLFPGAS
unknown := $(filter-out $(ALLFPGAS),$(MAKECMDGOALS))

# If there are any, bail!
$(if $(unknown),$(error Unknown FPGA: $(unknown)))

allfpga: $(ALLFPGAS)

$(ALLFPGAS):
        cd fpgas/$@/build && $(MAKE)

.PHONY: allfpga $(ALLFPGAS)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47358817

复制
相关文章

相似问题

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