我正在使用Make启动多个verilog编译器的构建。我只使用Make来利用-j标志。我的档案看上去像这样
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 allfpga或make -j2 fpga0 fpag3 fpga5 fpga6中的一个
但是,如果有一个错误(例如在我给fpag3的命令中),那么在第二个make中,系统将很高兴地花费几分钟的时间来构建,然后提前停止。
我的问题是,如果有些目标不是真正的目标,我如何才能一开始就停止呢?
发布于 2017-11-17 22:20:42
没有什么好的方法可以让你的所有被要求的目标“预先筛选”。在尝试构建目标之前,Make无法知道目标是否是可构建的(例如,可以使用模式规则或其他方法根据其他目标创建目标)。
但是,您可以这样做:
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)https://stackoverflow.com/questions/47358817
复制相似问题