4

Racketのビルドシステムには、複数の並列タスクを一度に実行できるプログラムを呼び出すビルドステップがあります。これはから呼び出されるので、元々で呼び出され たオプションmakeを尊重するとよいでしょう。-jmake

ただし、私が知る限り、-jオプションの値を、の内部から取得する方法はなく、を呼び出す Makefileプログラムの環境変数としても取得することはできません。make

この値、またはで呼び出されたコマンドラインmake、または関連情報を持つ類似のものを取得する方法はありますか?これをGNUmakeでのみ機能させてもかまいません。

4

2 に答える 2

1

注:この回答はmakeバージョン3.82以前に関するものです。バージョン4.2の時点でのより良い回答については、DimaPasechnikによる回答を参照してください。


どの-jオプションが提供されたかはわかりません。次の引用によると、ジョブの数に関する情報には、makeまたはそのサブプロセスから通常の方法でアクセスすることはできません。

トップメイクとそのすべてのサブメイクプロセスは、パイプを使用して相互に通信し、すべてのメイクでN個を超えるジョブが開始されないようにします。

(make 3.82ソースコードツリーのNEWSというファイルから取得)

トップメイクプロセスはジョブサーバーとして機能し、パイプを介してサブメイクプロセスにトークンを渡します。独自の並列処理を実行し、に提供されている指定された最大同時ジョブ数を引き続き尊重することが目標のようですmake。それを達成するために、あなたはどういうわけかそのパイプを介して通信に自分自身を挿入する必要があります。ただし、これは無名パイプであり、私が見る限り、独自のプロセスがジョブサーバーメカニズムに参加する方法はありません。

ちなみに、あなたが言及する「フラグの前処理バージョン」には--jobserver-fds=3,4、makeプロセス間のパイプのエンドポイントに関する情報を伝達するために使用される式が含まれています。これにより、内部で何が起こっているのかが少し明らかになります...

于 2012-06-25T01:17:57.410 に答える