web-dev-qa-db-fra.com

Comment puis-je faire une génération parallèle dans Visual Studio 2010?

Comment puis-je obtenir VS 2010 pour exécuter plus d'un processus de compilation C++ à la fois? Je veux dire construire des modules d'objets en parallèle; Je ne suis pas intéressé à construire plus d'un projet à la fois (je connais Outils> Options> Construire et exécuter <Nombre maximum de constructions de projets parallèles, mais cela ne fait pas ce que je veux).

Fondamentalement, je recherche l'équivalent de "make -jN" dans Visual Studio.

54
Ross Smith
  1. Outils -> Options
  2. Projets et solutions\Paramètres du projet VC++
  3. Compilations C++ simultanées maximales

En outre, comme Ross Smith l'a dit dans les commentaires, vous devez également activer l'option "Compilation multiprocesseur" sur le projet:

  1. Propriétés du projet
  2. Propriétés de configuration> C/C++> Général
  3. Compilation multiprocesseur
  4. Profit!
34
Billy ONeal

Il y a deux commutateurs qui doivent être définis pour que la génération VS utilise le multithreading (les deux sont spécifiques au projet):

  • propriétés du projet-> C/C++ -> Général -> Compilation multiprocesseur défini sur: Oui (/ MP)
  • propriétés du projet-> C/C++ -> Génération de code -> Activer la reconstruction minimale défini sur: Non (/ Gm -)

Vérifiez également Vos Outils-> Options-> Projets et Solutions-> Paramètres du projet VC++ -> Compilations C++ simultanées maximales paramètre. La valeur par défaut est 0, ce qui permet à VS d'utiliser autant de compilations concurrentes que possible.

18
jskierbi

Le commentaire de Necrolis semble la bonne solution.

/ MP (Build avec plusieurs processus)

L'option/MP oblige le compilateur à créer une ou plusieurs copies de lui-même, chacune dans un processus distinct. Ces copies compilent simultanément les fichiers source. Par conséquent, le temps total nécessaire pour créer les fichiers source peut être considérablement réduit.

Notez que vous pouvez le définir au niveau du projet (et donc qu'il s'appliquera à tous les fichiers qu'il contient) ainsi qu'aux fichiers individuels, utile par exemple si vous devez utiliser #import.

En particulier,/MP n'est généralement pas compatible avec les en-têtes précompilés ou les sources utilisant #import; dans ce cas, vous pouvez toujours définir l'indicateur/MP sur le projet, puis l'effacer sur les fichiers uniques (généralement, stdafx.cpp et tout fichier utilisant #import).

15
rob

Voici ce que j'ai fait

1) Allez dans Outils-> Options que sous "Projet et solutions" -> "Construire et exécuter" pour moi, il y avait le nombre de cœurs. Bien qu'au début, je pensais que c'était tout ce que je devais faire, mais ce n'est pas

2) Faites un clic droit sur votre projet et sélectionnez les propriétés. Sous "Propriétés de configuration" -> "C/C++" -> "Ligne de commande", entrez /MP4 où 4 est le nombre de cœurs que vous avez. Vous recevrez un avertissement sur les drapeaux non compatibles, nous avons donc une autre étape

3) Allez dans "Propriétés de configuration" -> "C/C++" -> "Génération de code" il y a "Activer la reconstruction minimale". Remplacez cela par non.

Reconstruisez et vous devriez voir plusieurs processus CL dans votre gestionnaire de tâches.

4
user34537

jom est l'outil que vous recherchez.

Depuis le wiki à: http://qt-project.org/wiki/jom

jom est un clone de nmake pour prendre en charge l'exécution de plusieurs commandes indépendantes en parallèle. Il ajoute essentiellement le commutateur de ligne de commande -j similaire à GNU make.

Alors que la plupart de la documentation est destinée aux développeurs Qt essayant d'accélérer les builds de la bibliothèque Qt sur Windows, jom devrait aussi parfaitement fonctionner dans les projets non Qt, tant que vous avez un makefile compatible avec nmake.

La page wiki contient des fichiers binaires que vous pouvez télécharger et vous appelez jom comme vous le feriez avec nmake.

3
Rian Sanderson

Je vois! Votre exigence est la construction d'un projet unique dans des threads parallèles.

Je trouve Shark compiler Control plugin très utile

0
Digital_Reality