与当运行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-如果是这样,怎么样?
必须保留作业服务器有两个方面:第一个是实际的环境变量,它用于向sub-make发送选项.该值正在被正确保留,否则make将不知道它甚至应该查找jobserver并且您不会看到该警告消息.
第二个方面是两个打开的文件描述符,它们被传递给make的子节点.你的脚本必须保留这两个描述符,并在调用sub-make时将它们保持打开状态.
您没有向我们展示用于调用子make的Python代码.默认情况下,该subprocess模块将不会关闭文件描述符,但您可以提供的close_fds=True选项,它这样做......你应该不会,如果你想并行make调用与jobserver正常使用此选项.
如果你没有使用subprocess,那么你必须告诉我们你在做什么.
您可能应该使用标记来标记它,python因为它主要是一个Python问题.