Make:递归后删除目标

时间:2019-07-11 20:28:54

标签: makefile gnu-make

Make是广泛使用于各种用途的美丽而强大的工具。我喜欢它,这只是一个细节。

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

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

# where I have derived ${SUBMAKEGOALS} earlier

这是症结所在:我可以像这样设置make界面...

$: 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 exit出现错误。


使用make递归时,必须有某种方法可以清除make目标或表明make已成功完成...

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

最好

     

make submake-cmd foo bar biz baz

您可能在想什么。如果您想传递未知数量的目标以进行子制造,则可以这样进行:

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

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