是否可以将GNU make jobserver环境"传递"到通过第三方服务的子服务器(非制造商)

Gre*_*reg 9 gnu-make

与当运行GNU-制定规则-jN化妆创建jobserver跨submakes管理岗位数.此外,您可以通过为其添加前缀来"将作业服务器环境"传递给制作配方+- 例如:

target :
        +./some/complex/call/to/another/make target
Run Code Online (Sandbox Code Playgroud)

现在我代替子make,我有一个(python)脚本运行一些复杂的打包操作(对于make来说太复杂).它可以遇到的一个动作实际上可以产生一个make命令.

package.stamp : $(DEPS)
         +./packaging.py $(ARGS)
         touch $@
Run Code Online (Sandbox Code Playgroud)

现在,当在packaging.py中调用make命令时

make[1]: warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为无论是make设置的环境,都可能没有被python尊重或传递.

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

Mad*_*ist 7

必须保留作业服务器有两个方面:第一个是实际的环境变量,它用于向sub-make发送选项.该值正在被正确保留,否则make将不知道它甚至应该查找jobserver并且您不会看到该警告消息.

第二个方面是两个打开的文件描述符,它们被传递给make的子节点.你的脚本必须保留这两个描述符,并在调用sub-make时将它们保持打开状态.

您没有向我们展示用于调用子make的Python代码.默认情况下,该subprocess模块将不会关闭文件描述符,但您可以提供的close_fds=True选项,它这样做......你应该不会,如果你想并行make调用与jobserver正常使用此选项.

如果你没有使用subprocess,那么你必须告诉我们你做什么.

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

  • 谢谢 - 是的,我将 `close_fds` 设为 true。我将把 python 放在标签之外 - 我想要回答的问题和你所做的回答是“工作服务器需要由子进程保留的内容”。答案环境变量和打开的文件描述符是独立于我的 python 失败的正确答案。 (2认同)
  • 对于未来访问的任何人,Python 的子进程库在 Python 3.2 中切换为默认“close_fds=True”。 (2认同)