Make:递归后删除目标

Make: drop targets after recursion

Make 是一款美观而强大的工具,用途广泛。我喜欢它,这只是一个细节。

假设我有一个递归 make 配方定义如下:

submake-cmd:
  make ${SUBMAKEGOALS} -C foo

# where I have derived ${SUBMAKEGOALS} earlier

关键在于:我可以像这样设置生成界面...

$: make submake-cmd SUBMAKEGOALS="foo bar"

-- 或--

# preferably 
make submake-cmd foo bar biz baz

唯一的问题是,如果我计算 ${SUBMAKEGOALS},那么我不得不像这样编写 submake-cmd 规则以避免不可预知的行为:

submake-cmd:
  make ${SUBMAKEGOALS} -C foo
  exit 1

这样make就会退出,我会看到make退出时报错。


必须有一些方法来清除 make 目标或指示 make 在使用 make 递归时已成功完成...

有没有人有什么想法?

preferably

make submake-cmd foo bar biz baz

你可能想多了。如果你想将未知数量的目标传递给 submake,那么可以这样做:

ifneq ($(sub),)
.DEFAULT:
    $(MAKE) -C $(sub) $@
endif

然后:make sub=dir1 foo; make sub=dir2 bar biz baz等等。 (我假设根 makefile 本身不包含任何 foo/bar/biz/baz;如果不是这样,那么您必须适当地修补这些规则)。