首先,让我说我知道使用递归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
以及a
,b
和c
个文件夹中的另一个Makefile构建内容。
由于subdir
中的Makefile没有任何用途,除了重定向make,我希望make不要打印:Entering directory rootdir/subdir
和Leaving directory rootdir/subdir
来清理输出。
另一方面,由于在子文件夹a
,b
和c
中执行了命令,我执行希望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禁用它时,如何重新启用打印目录?
答案 0 :(得分:1)
通过MAKEFLAGS
variable将命令行标记传递给子作品。您可能希望在调用子品牌之前手动将--no-print-directory
(如果有)替换为MAKEFLAGS
和w
:
${MAKE} MAKEFLAGS="$(subst --no-print-directory,w,${MAKEFLAGS})" -C ...