1

如果我现在的环境,

$ ulimit -s
10240

但是如果我通过 gmake 运行一个进程,堆栈大小是无限的。例如( ;: 是让 gmake 使用 shell 执行命令,否则它会尝试查找该名称的可执行文件)

$ cat Makefile
default:
        ulimit -s; :
$ gmake
ulimit -s; :
unlimited
  • 是否有可能让 gmake 不改变限制?

  • 如果不是,是否可以在不修改它们的情况下将所有规则的限制重置为我想要的(虽然我可能会更改主 Makefile,但某些规则来自生成的包含文件,并且更改生成逻辑开始带来自己的问题)。

编辑:@MadScientist 了解到这是 3.81 的问题,该问题已在 3.82 中修复。但我仍然很感激能解决这个问题。

4

2 回答 2

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

于 2013-04-29T13:34:28.917 回答
0

那是一个BUG,在3.82中解决了,但是3.82还有其他的bug。

似乎 make 有一个(非常可疑,恕我直言)每 4 年更新一次的政策。我猜大多数 Linux 发行版都不会在 2014 年底之前更新他们的版本。

我阅读了这篇关于 3.82 中的重大错误的博客,该错误已在此 fork中修复。

于 2013-08-23T12:54:23.863 回答