gpt4 book ai didi

bash - 编译几个项目(使用 makefile),但在第一个损坏的构建上停止?

转载 作者:行者123 更新时间:2023-11-29 09:06:36 26 4
gpt4 key购买 nike

我想做一些事情,比如:

for i in *
do
if test -d $i
then
cd $i; make clean; make; cd -;
fi;
done

这工作正常,但我想“打破”for 循环,以防构建失败。

有没有办法做到这一点?也许是某种 if 语句,可以检查 make 是否成功?

最佳答案

你可以使用 Make 本身来实现你正在寻找的东西:

SUBDIRS := $(wildcard */.)

.PHONY : all $(SUBDIRS)
all : $(SUBDIRS)

$(SUBDIRS) :
$(MAKE) -C $@ clean all

如果您的任何目标失败,Make 将中断执行。

更新。

支持任意目标:

SUBDIRS := $(wildcard */.)  # e.g. "foo/. bar/."
TARGETS := all clean # whatever else, but must not contain '/'

# foo/.all bar/.all foo/.clean bar/.clean
SUBDIRS_TARGETS := \
$(foreach t,$(TARGETS),$(addsuffix $t,$(SUBDIRS)))

.PHONY : $(TARGETS) $(SUBDIRS_TARGETS)

# static pattern rule, expands into:
# all clean : % : foo/.% bar/.%
$(TARGETS) : % : $(addsuffix %,$(SUBDIRS))
@echo 'Done "$*" target'

# here, for foo/.all:
# $(@D) is foo
# $(@F) is .all, with leading period
# $(@F:.%=%) is just all
$(SUBDIRS_TARGETS) :
$(MAKE) -C $(@D) $(@F:.%=%)

关于bash - 编译几个项目(使用 makefile),但在第一个损坏的构建上停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com