69

大量のコアを搭載したマシンに Makefile がありますが-jX、プロジェクトをコンパイルするときに常に書き込みを忘れているようで、必要以上に時間がかかります。

-jmake がこのマシンで複数のジョブを自動的に並行して実行するように、環境変数またはその他の永続的な構成ファイルを介してフラグを設定する方法はありますか?

4

10 に答える 10

44

Linux を使用していると仮定します。これは私のものです~/.bashrc

# parallel make
export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
alias pmake='time nice make -j$NUMCPUS --load-average=$NUMCPUS'

使用例

samm@host src> echo $NUMCPUS
8
samm@host src> pmake

になりtime nice make -j8 --load-average=8ます。

これを に入れることに関する特定の質問に答えるために、Makefileこのロジックを Makefile 全体に振りかけるのは現実的ではありません。これを最上位の Makefile に入れることも、サブディレクトリから構築することが多く、それらも並行して構築したいため、優れた解決策ではありません。ただし、ソース階層がかなりフラットな場合は、うまくいく可能性があります。

于 2011-01-24T03:54:45.350 に答える
38

環境変数はMAKEFLAGS、すべてのmake実行の一部であるフラグを渡すことができるようです (少なくとも GNU make の場合)。私自身はあまりうまくいきませんでしたが、使用可能なコアの数に適した数のジョブを自動的に実行するの-lではなく、使用できる可能性があります。-j

于 2011-01-24T03:44:31.187 に答える
29

私は通常、bash スクリプトで次のようにこれを行います。

make -j$(nproc)
于 2016-12-20T16:41:25.730 に答える
6

エイリアスはスクリプト内では展開されません。別のmakeスクリプトを作成し、$PATHディレクトリの 1 つに配置することをお勧めします。

#!/bin/sh

if [ -f /proc/cpuinfo ]; then
    CPUS=`grep processor /proc/cpuinfo | wc -l`
else
    CPUS=1
fi
/usr/bin/make -j`expr $CPUS + 1` "$@"
于 2015-06-03T20:33:52.277 に答える
6

次のような行を Makefile に追加できます。

NUMJOBS=${NUMJOBS:-" -j4 "}

次に${NUMJOBS}、ルールに行を追加するか、別のMakefilevar に追加します ( などMAKEFLAGS)。存在する場合、これは NUMJOBS 環境変数を使用します。そうでない場合は、自動的に を使用します-j4。好みに合わせて調整または名前を変更できます。

(NB: 個人的には、特に他の人に配布する場合は、デフォルトを-j1orにすることを好みます""。これは、複数のコアも持っていますが、多くの異なるプラットフォームでコンパイルし、設定を無効にするのを忘れる-jXことがよくあるためです。 )

于 2011-01-24T03:44:40.370 に答える
-2

私はただ置くだろう

alias make='make -j'

~/.profileまたはで~/.bashrc

マニュアルによると:

「-j」オプションの後に整数のように見えるものがない場合、ジョブ スロットの数に制限はありません。

于 2013-06-05T14:57:40.630 に答える