Makefile - 将作业参数传递给子makefile

时间:2012-02-05 05:40:46

标签: makefile jobs

我有一个调用多个其他makefile的makefile。

我想将-j param传递给其他makefile调用。

像(make -j8):

 all:
     make -f libpng_linux.mk -j$(J)

其中$(J)是-j8的值8。我绝对发誓我以前做过这个,但我无法找到我的榜样。

$(MAKEFLAGS)似乎包含--jobserver-fds = 3,4 -j,无论-j2还是-j8

编辑:可能的解决方案:

很快就会发布这个答案。

这似乎是一个不用担心的解决方案。调用主makefile时包含-j8。对make的子调用应该如下所示:

 all:
      +make -f libpng_linux.mk -j$(J)

注意make前面的“+”。我注意到当我尝试并行构建时发出警告:make [1]:警告:jobserver unavailable:使用-j1。将“+”添加到父制定规则。

2 个答案:

答案 0 :(得分:4)

Only certain flags go into $(MAKEFLAGS)。不包括-j,因为子进行了彼此通信以确保发生了适当数量的作业

此外,您应该使用$(MAKE)而不是make,因为$(MAKE)将始终评估为正确的可执行文件名称(可能不是make)。

答案 1 :(得分:0)

“不这样做”并不总是答案,但在这种情况下,至少对于GNU make来说,就是这样。

GNU make父进程具有一个内部jobserver。如果顶级Makefile-j一起运行,则子进程make将与作业服务器通信并从中读取并行度,而无需显式的-j