1

私の今の環境なら、

$ ulimit -s
10240

しかし、gmake を使用してプロセスを実行すると、スタック サイズは無制限になります。たとえば (;: は、gmake がコマンドを実行するためにシェルを使用するようにするためのものです。それ以外の場合は、その名前で実行可能ファイルを見つけようとします)

$ cat Makefile
default:
        ulimit -s; :
$ gmake
ulimit -s; :
unlimited
  • gmake が制限を変更しないようにすることは可能ですか?

  • そうでない場合は、すべてのルールを変更せずに制限をリセットすることは可能ですか (メインの Makefile を変更することはできますが、一部のルールは生成されたインクルード ファイルから取得され、生成ロジックを変更すると独自の問題が発生し始めます) )。

編集: @MadScientist は、3.82 で修正された 3.81 の問題であることを知りました。しかし、それでも回避策をいただければ幸いです。

4

2 に答える 2

2

これは、GNU make 3.82 で修正されたhttps://savannah.gnu.org/bugs/?22010のように聞こえます。

GNU make のバージョンを更新できず (3.82 は 3 年以上前のようです...)、パッチをバックポートできない場合は、次のようなことを試すことができます (テストされていません)。スタックを変更するシェル スクリプトを作成します。

$ cat stacksh
#!/bin/sh
ulimit -s ...
exec /bin/sh "$@"

$ chmod 755 stacksh

次に、メイクファイルで、SHELLスクリプトを使用するようにリセットします。

SHELL := /path/to/stacksh

これで、make はシェル スクリプトを呼び出してコマンドを実行します。/bin/sh

于 2013-04-29T13:34:28.917 に答える
0

これはバグで、3.82 で解決されていますが、3.82 には他のバグがあります。

make には (非常に疑わしい、私見ですが) 4 年ごとの更新ポリシーがあるようです。ほとんどの Linux ディストリビューションは、2014 年後半までに make を更新しないと思います。

この forkで修正された 3.82 の重大なバグに関するこのブログを読みました。

于 2013-08-23T12:54:23.863 に答える