2017-01-29 14 views
0

Makefileに渡されるオプション(env変数ではない)の値を取得して使用する方法はありますか?例えば。コマンドラインで-jオプション(並列処理用)が渡された場合、どのようにMakefileの中でそれにアクセスできますか?Makefileでオプションの値を使用する

答えて

1

GNU Makeでは、ほとんどのオプションはMAKEFLAGSfindstringを使用)の値を調べることで検出可能です。その値は、通常、オプションの "標準的な" 1文字の文字列です。たとえば、Makeをmake --keep-going --questionとすると、MAKEFLAGS"kq"になります。

ですが、 make -jを実行する場合、MAKEFLAGSには-jが含まれます。 make -j2を実行すると、MAKEFLAGSには-j --jobserver-ids,3,4が含まれます。

したがって、「並行していない」、「並行している」、「無制限」、「並行して制限されている」というケースを区別するのに十分な情報があります。最後のケースで<num>が何であるかを知る方法はない、私は恐れている。

1

-jのパラメータを使用する場合は、.MAKE.JOBSを使用できます。一般的に、MAKEFLAGS変数があなたの希望する変数です。

makeにはありません(FreeBSDのmakeで利用可能です)。

+0

GNU makeでは.MAKE.JOBSは利用できません。 – talonx

1

Michael Livshinが言うように、あなたはGNU make 4.2以上にアップグレードしない限り、あなたは知ることができません。

* The amount of parallelism can be determined by querying MAKEFLAGS, even when 
    the job server is enabled (previously MAKEFLAGS would always contain only 
    "-j", with no number, when job server was enabled). 

基本的に-j2がないだけで-j以前のように、常にMAKEFLAGSに表示されることを意味しますNEWSファイルから。

この値を変更しても効果はありませんが、それが興味のあるものであれば...並列化の量は、最初のmakeコマンドが呼び出され、他のすべてのmakeコマンドが使用されるときに設定されますその同じ値。並列化を完全に無効にするだけで、その量を変更することはできません。

+0

ありがとうございます。私はそれを変更するのではなく、似たようなオプション(Goのgox)をサポートするコンパイラに渡してみました。 – talonx

+0

makeはN個のジョブを使ってN個のGoxオペレーションを開始し、各GoxオペレーションはN個のスレッドで構築されるので、CPU上で "ダブルディップ"していることに気をつけてください...もっと "スクエアディッピング ":)。 – MadScientist

関連する問題