如果我目前的环境,
$ ulimit -s
10240
但是如果我通过gmake运行一个进程,那么堆栈大小是无限的。例如(;:是使gmake使用shell来执行命令,否则它将尝试通过该名称查找可执行文件)
$ cat Makefile
default:
ulimit -s; :
$ gmake
ulimit -s; :
unlimited
是否可以让gmake不改变限制?
如果没有,是否可以将限制重置为我想要的所有规则而不修改它们(虽然我可以更改主Makefile,但是一些规则来自生成的包含文件并更改生成逻辑开始带来自己的问题。)
编辑:@MadScientist了解到这是3.81的一个问题,在3.82中已修复。但我仍然很感激你的工作。
答案 0 :(得分:2)
这听起来像在GNU make 3.82中修复https://savannah.gnu.org/bugs/?22010。
如果您无法更新您的GNU make版本(3.82就像,现在已超过3年......)并且您无法向后移植补丁,您可以尝试这样的事情(未经测试);创建一个shell脚本来修改堆栈:
$ cat stacksh
#!/bin/sh
ulimit -s ...
exec /bin/sh "$@"
$ chmod 755 stacksh
然后在您的makefile中,重置SHELL
以使用您的脚本:
SHELL := /path/to/stacksh
现在make会调用你的shell脚本来运行命令,而不是/bin/sh
答案 1 :(得分:0)