是否可以将GNU制造环境传递到通过第三方(非制造)提供服务的子制造 [英] Is it possible to "pass-through" GNU make jobserver environment to a submake served via a 3rd-party (non-make)

查看:19
本文介绍了是否可以将GNU制造环境传递到通过第三方(非制造)提供服务的子制造的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用-jNmake运行gnu-make规则时,会创建一个jobserver,用于管理跨子制造的作业计数。此外,您还可以通过为其添加前缀+-例如:

来将其"传递给一个Make配方"
target :
        +./some/complex/call/to/another/make target
现在,我不是子make,而是一个(Python)脚本,它运行一些复杂的打包操作(对于make来说太复杂了)。它可能遇到的操作之一实际上可能会产生make命令。

package.stamp : $(DEPS)
         +./packaging.py $(ARGS)
         touch $@

现在,当在Packaging.py内调用make命令时

make[1]: warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.

这是有一定道理的,因为无论Make设置了什么环境,python都可能不会支持或传递。

是否可以通过python程序将jobserver引用传递给子make-如果可以,如何传递?

推荐答案

有两个方面必须保留:第一个是实际的环境变量,它用于将选项发送给子make。该值被正确地保留,否则make甚至不知道它应该查找该j观察者,并且您不会看到该警告消息。

第二个方面是两个打开的文件描述符,它们被传递给make的子项。您的脚本必须保留这两个描述符,并在调用子make时使它们保持打开状态。

您没有向我们展示使用了什么Python代码来调用子make。默认情况下,subprocess模块不会关闭文件描述符,但您可以提供close_fds=True选项让它关闭文件描述符...如果您希望并行Make调用能够正确地与j观察者一起工作,则应使用此选项。

如果您没有使用subprocess,则您必须向我们显示您正在执行的操作。

您可能应该使用python标记此问题,因为它主要是一个Python问题。

这篇关于是否可以将GNU制造环境传递到通过第三方(非制造)提供服务的子制造的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆