61 votes

Comment utiliser tous les cœurs pour nmake ?

Je viens d'avoir un nouvel ordinateur quad core et j'ai remarqué que nmake n'utilise qu'un seul processus.

J'avais l'habitude d'utiliser make qui avait le commutateur -j4 pour lancer 4 processus. Quel est l'équivalent pour nmake ?

[modifier] En me basant sur les informations ci-dessous, j'ai pu ajouter une commande à mon fichier de projet qmake :

QMAKE_CXXFLAGS += /MP

Ce qui a eu raison de moi. Merci beaucoup.

54voto

Violet Giraffe Points 5764

Une autre façon générique, non liée à Qt, de dire que nmake pour utiliser tous les cœurs est de définir la variable d'environnement CL a /MP :

set CL=/MP
nmake

utilisera tous les cœurs de l'unité centrale.

3 votes

D'après ce que j'ai compris, cela n'est utile que si plusieurs fichiers sont compilés à l'aide de la même commande.

0 votes

@Zitrax : vous avez raison. Typiquement, vous compilez un projet (un tas de fichiers) pour qu'il fonctionne.

7 votes

Le projet que j'ai examiné compile quelques centaines de fichiers, mais chacun d'entre eux utilise une commande cl distincte, comme par exemple cl a.cpp, cl b.cpp, cl c.cpp, ... Je voulais donc souligner que cela ne semble pas aider dans une telle situation avec nmake, à moins que le système de construction ne soit réécrit de manière à fournir plusieurs fichiers à chaque commande cl, comme par exemple cl a.cpp b.cpp c.cpp ... .

40voto

Tolik Odukha Points 331

QT dispose d'un outil pour cela : http://download.qt.io/official_releases/jom/

Ils l'utilisent également par défaut dans Qt creator.

7 votes

Les binaires précompilés de jom sont ici : ftp.qt.nokia.com/jom

0 votes

Le lien est mort et il s'agit d'une nmake et non une question de QT. Peut-être pouvez-vous expliquer un peu plus les choses.

1 votes

@jww ce lien était vivant. Il y a 9 ans au moins (et des mises à jour plus récentes). Vous avez vu les tags "qt" et "QMAKE_CXXFLAGS" dans la question ? De plus, il n'y avait pas de support pour l'utilisation de plusieurs cœurs dans nmake il y a 9 ans... il n'y a donc aucune raison de downvoter la réponse.

27voto

Alnitak Points 143355

Selon le MSDN il n'y a pas d'option de ce type pour les nmake .

Vous pouvez cependant faire en sorte que le compilateur construise plusieurs fichiers en parallèle en utilisant l'option /MP avec le compilateur en ligne de commande VC++ et de passer plusieurs fichiers en même temps :

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

Notez cependant que la plupart des Makefiles n'appellent pas le compilateur de cette manière - ils invoquent habituellement le compilateur séparément pour chaque fichier source individuel, ce qui empêcherait l'utilisation de l'option /MP de faire quoi que ce soit d'utile.

1 votes

Seulement pas .o, mais .obj. Les compilateurs VC++ génèrent des .obj, GCC - .o, AFAIK

16 votes

Une façon pratique d'utiliser cet indicateur est de laisser cl.exe le récupérer à partir de la variable d'environnement "CL". Définissez-la dans les propriétés de votre système ou tapez-la sur la ligne de commande : "set CL= /MP"

6voto

mloskot Points 13971

Les CMake 2.8.1 RC1 Au moment où j'écris ces lignes, il est prêt à être essayé. Il apporte un nouveau générateur pour NMake qui s'appelle NMake Makefiles JOM et il génère NMake avec des paramètres spécifiques pour jom, qui est le remplaçant direct de NMake. Ainsi, il permet une construction multi-processus à l'aide de NMake.

6voto

Martin Beckett Points 60406

Incredibuild revendique la possibilité d'exécuter des builds nmake sur plusieurs cœurs / plusieurs machines. Je n'ai pas d'expérience en la matière.

0 votes

C'est très simple en fait et cela fonctionne très bien. Il s'agit d'une bonne référence : xoreax.helpserve.com/

0 votes

Oui, j'ai travaillé sur une application qui a pris environ 1h20 pour la compiler entièrement. Avec Incredibuild et environ 10 machines multi-processeurs, la même application a été compilée en 5 minutes. Une amélioration assez impressionnante si vous voulez mon avis !

0 votes

Le lien vers la référence sur la façon d'accélérer nMake à l'aide d'IncrediBuild a été modifié comme suit lien . Clause de non-responsabilité - l'auteur de ce commentaire travaille chez IncrediBuild

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X