1

我有一个Makefile遍历目录列表,它工作正常,但是我不想得到Entering/ info 消息,Leaving如下所示:

make[1]: Leaving directory `/home/zzz/aaa/bbb/ccc'

执行遍历的代码位(列表ccc中的目录之一在哪里并且在目录中)在这里:SUBDIRSMakefilebbb

@for i in $(SUBDIRS); do \
(cd $$i; make $@); \
done

我猜想这(cd $$i; make $@)部分需要做些什么,但不知道是什么。

谢谢

4

2 回答 2

1

GNU 根据MAKELEVEL: 决定是否打印此信息,如果已设置且 > 0,则打印该信息。您可以取消设置或伪造 zero MAKELEVEL,因此 GNU make 认为这是初始调用。

@for i in $(SUBDIRS); do \
    (cd $$i; unset MAKELEVEL; make $@); \
done

应该做的伎俩。

另一方面,Recursive make 被认为是有害的(google it)。如果可以,请避免它。

编辑:正如 bobbogo 指出的那样,有一个 GNU make 选项--no-print-directory;这比我上面的破解要好得多。

于 2013-03-07T14:21:40.560 回答
0

尝试使用包含而不是“for”循环:

http://www.gnu.org/software/make/manual/html_node/Include.html

于 2013-03-07T14:09:52.540 回答