GNU进行嵌套调用

时间:2019-06-06 21:18:08

标签: bash gnu-make

我需要找到一种避免并行进行子调用的方法,并避免收到警告:     make [1]:警告:-jN在子make中被强制:禁用作业服务器模式。

我确实有几个并行运行的make调用,因为主要的make调用运行时标记为-jN,且N> 1 我收到上面列出的警告,并且可以看到Makefile并引起调用。 但是,我尝试使用gnu / make文档中提供的几个选项,但仍然无法发出警告。

a)
+make -C $FOO $@

b)
make MAKEFLAGS= -C $FOO $@

c)
make -j1 -C $FOO $@

d)
.NOTPARALLEL:bar

我需要在没有警告的情况下运行整个编译过程(因为它们被视为错误)。 但是上述警告继续出现。

1 个答案:

答案 0 :(得分:0)

警告来自被调用的make,因为它正在通过MAKEFLAGS获取某些与作业服务器相关的标志。

为了展示这一点,我们可以像这样简单地调用make来重现错误消息:

make --jobserver-fds=3,4 -j1
make: warning: -jN forced in submake: disabling jobserver mode.
... other errors about those being bad file descriptors ...

MAKEFLAGS命令行中覆盖make并没有执行此操作,因为在从make收到MAKEFLAGS后,被调用的env对此进行了解释。父母。但是我们可以通过外部实用程序yourtarget: yourprereq env MAKEFLAGS= make -j1 -C $FOO $@ 拦截父级的环境变量:

env

借助make,我们可以完全控制嵌套final QImageCapture imageCapture = new QImageCapture("imageCapture"); final MorphiaQuery<ImageCapture> query = new MorphiaQuery<>(morphia,datastore,imageCapture); query.where(imageCapture.id.in(ids)). set(imageCapture.deleted, TRUE); 所看到的环境变量。