39

-j引数を使用して、ビルド プロセスのスレッド数を設定できます。たとえば、私は 4 コア + 4 仮想を持っています。書くと:make -j8速度が4倍になります。

その値をデフォルトとして設定することは可能ですか? (たとえば、Linux Gentoo では、構成ファイルで、このデフォルト値を設定できます)。

ps私はArch Linuxを持っています

4

3 に答える 3

42

あなたの質問はスレッドに関するものではなく、make によって実行されるプロセス (ジョブ) に関するものです。

コンソールから make を使用する場合、これを設定する簡単な方法は次のとおりです。

alias make="/usr/bin/make -j 8"

あなたの.profileファイルに。

も使用できますがsetenv MAKEFLAGS '-j 8'MAKEFLAGS必要な数のプロセスを維持するには再帰make呼び出しと通信する必要があるため、一部のシナリオではこのパラメーターを無視できます。幸いなことに、この方法は現在のバージョンの GNU Make で動作します

于 2012-05-12T22:41:04.250 に答える
35
setenv MAKEFLAGS '-j8'

お役に立てれば!

于 2012-05-12T22:36:46.147 に答える
21

これが私がやった方法です:

CORES ?= $(shell sysctl -n hw.ncpu || echo 1)

all:; @$(MAKE) _all -j$(CORES)
_all: install lint test
.PHONY: all _all
…

基本的に、デフォルトのターゲットallを「プライベート」に「エイリアス」しました_all。コアの数を把握するコマンドはOSX固有のものであり、AFAIKであるため、必要に応じて、よりクロスプラットフォームになるように改善できます。また、?=割り当てがあるため、必要に応じて env 変数でオーバーライドできます。

編集:

MAKEFLAGS次のように、makefile 自体の中で from に追加することもできます。

CPUS ?= $(shell sysctl -n hw.ncpu || echo 1)
MAKEFLAGS += --jobs=$(CPUS)
…

編集2:

よりクロスプラットフォームにしたい場合は、次を使用することもできます。

CPUS ?= $(shell (nproc --all || sysctl -n hw.ncpu) 2>/dev/null || echo 1)
于 2015-05-28T04:44:55.697 に答える