在Makefile中,当设置了--no-print-directory时,如何在子目录中重新启用--print-directory?

时间:2012-01-22 14:03:28

标签: makefile flags

首先,让我说我知道使用递归Makefile的缺点。所以如果你在这里只是告诉我不要使用它,请不要。

想象一下这个目录结构:

rootdir
`-- subdir
    |-- a
    |-- b
    `-- c

假设rootdir上的Makefile如下所示:

.PHONY: all
all:
    # build some stuff
    $(MAKE) -C subdir

subdir中的那个读起来像这样:

.PHONY: all
all:
    # nothing here except redirecting make to each of the subdirectories
    $(MAKE) -C a
    $(MAKE) -C b
    $(MAKE) -C c

以及abc个文件夹中的另一个Makefile构建内容。

由于subdir中的Makefile没有任何用途,除了重定向make,我希望make不要打印:Entering directory rootdir/subdirLeaving directory rootdir/subdir来清理输出。

另一方面,由于在子文件夹abc中执行了命令,我执行希望make打印这些输出。以下是我认为可行的方法:

rootdir的Makefile:

.PHONY: all
all:
    # build some stuff
    $(MAKE) --no-print-directory -C subdir

subdir的Makefile:

.PHONY: all
all:
    # nothing here except redirecting make to each of the subdirectories
    $(MAKE) --print-directory -C a
    $(MAKE) --print-directory -C b
    $(MAKE) --print-directory -C c

问题是,在为--no-print-directory调用make时,如果subdir被授予,--print-directory在调用make a时不会再次启用它,{ {1}}或b

所以我的问题是,当父make禁用它时,如何重新启用打印目录?

1 个答案:

答案 0 :(得分:1)

通过MAKEFLAGS variable将命令行标记传递给子作品。您可能希望在调用子品牌之前手动将--no-print-directory(如果有)替换为MAKEFLAGSw

${MAKE} MAKEFLAGS="$(subst --no-print-directory,w,${MAKEFLAGS})" -C ...