2009-03-02 1 views
41

私はちょうど新しいクアッドコアコンピュータを得て、nmakeが1つのプロセスしか使用していないことに気付きました。nmakeにはどのようにすべてのコアを利用できますか?

私は、4つのプロセスを起動するためにスイッチ-j4を持つmakeを使用しました。 nmakeに相当するものは何ですか?

私は私のqmakeのプロジェクトファイルにコマンドを追加することができました下記の情報に基づいて、[編集] :効果的に私のためにそれをやった

QMAKE_CXXFLAGS + =/MP

。どうもありがとう。

答えて

20

を、nmakeためのそのようなオプションはありません。

あなたはしかし、VC++コマンドラインコンパイラと /MPオプションを使用して、同時に複数のファイルを渡すことによって、コンパイラが並列に複数のファイルを構築することができます

> cl /MP a.cpp b.cpp c.cpp 

しかし、ほとんどのMakefileはないことに注意してくださいこのようにコンパイラを呼び出す - 通常は個々のソースファイルごとに別々にコンパイラを呼び出すため、/MPオプションは何も役に立たない。

+1

.oではなく、.objのみです。 VC++コンパイラは.obj、GCC - .o、AFAIK – abatishchev

+15

を生成します。このフラグを使用する便利な方法は、cl.exeが "CL"環境変数からcl.exeを検索させることです。あなたのシステムのプロパティに設定するか、コマンドラインで入力してください: "set CL =/MP" – jturcotte

3

クイックグーグルが与える:MSDNによるとhttp://msdn.microsoft.com/en-us/library/bb385193.aspx

+1

コンパイラの同じ呼び出しで複数の.cppファイルを並列にコンパイルする - 複数の 'make'ターゲットを並列に構築しない – Alnitak

+0

VS2008でこのスイッチを切り替える方法は非常に面白いです!私はそれを見つけることができません – abatishchev

+0

それは "nmake"オプションではない、それは "c1"オプション(つまり、コマンドラインコンパイラで使用する) – Alnitak

6

Incredibuild複数のコア/複数のマシンでnmakeビルドを実行できると主張しています。私はそれの経験がありません。

+0

これは実際にはとても簡単で素晴らしいです。これは良い参考資料です:http://xoreax.helpserve.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=171 – ttvd

+0

うん!私はアプリに取り組んだ。それは約1時間20分かかりました。完全にコンパイルする。 Incredibuildと約10台のマルチプロセッサマシンで、同じアプリケーション。 5分で集めた。あなたが私に尋ねるなら、かなり印象的な改善! –

+0

IncrediBuildを使用してnMakeを加速する方法のリファレンスへのリンクが[link](http://xoreax.helpserve.com/staff/Knowledgebase/Article/Edit/105)に変更されました。免責事項 - このコメントの作者はIncrediBuildで働いています – Dori

3

これは通常のメイクファイルでは機能しませんが、複数の.vcprojファイルを同時にビルドすることができるVisual Studio 2005の設定があります(ただし、一方が依存しない場合)。ツール - >オプション - >プロジェクトとソリューション - >ビルドと実行 - >X並列プロジェクトビルドの最大数。

32

QTはツール、それは試して準備ができて、これを書いている時点と同様に、この http://qt.gitorious.org/qt-labs/jom

+0

優れた発見! – SPWorley

+7

プリコンパイルされたjomバイナリは次のとおりです。ftp://ftp.qt.nokia.com/jom/ – Lucas

+1

jomの新しいホームはhttps://wiki.qt.io/Jomです。 – Hossein

8

CMake 2.8.1 RC1のためになっている、NMake Makefiles JOMと呼ばれるNMAKEのための新たな発電機を持参し、それはJOMの特定の設定でNMAKEを生成し、これはNMakeの置き換えである。したがって、NMakeを使用してマルチプロセッシングを可能にします。

set CL=/MP 
nmake 

は、すべてのCPUコアを使用します。

37

すべてのコアを使用するようにnmakeを伝えるための別の一般的な、非Qtの関連方法は、環境変数CL/MPに設定することです。

+1

これは、複数のファイルが同じコマンドを使用してコンパイルされている場合にのみ役立ちます。 – Zitrax

+0

@Zitrax:あなたは正しいです。通常、プロジェクト(ファイル束)をコンパイルして動作させます。 –

+2

私が見たプロジェクトでは、数百のファイルをコンパイルしますが、それぞれが 'cl a.cpp、cl b.cpp、cl c.cpp ... 'のような別々のclコマンドを使用しています。ビルドシステムが 'cl a.cpp b.cpp c.cpp ...'のような各clコマンドにいくつかのファイルを提供するように書き直されない限り、nmakeでこのような状況に役立たないようです。 – Zitrax

関連する問題