107 votes

Comment changer le type de build en mode Release dans CMake ?

Je suis en train de construire un projet en mode Release. Par défaut, il est construit en mode debug. Je définis la variable CMAKE_BUILD_TYPE sur "Release" dans CMakeLists.txt. Mais le projet est toujours construit en mode debug. Quand je passe "Release" comme type de build dans la commande CMake, cela ne fonctionne toujours pas.

La commande CMake que j'utilise est :

cmake -G"Visual Studio 10" -DCMAKE_BUILD_TYPE=Release
  -H"chemin_source" -B"Chemin_de_construction"

Veuillez fournir une solution si possible.

250voto

Rok Points 1940

Pour changer le type de build, sur Windows, cela doit être fait au moment de la construction :

cmake --build {DIR} --config Release

Par défaut, c'est Debug. Je cherche toujours un moyen de changer cette valeur par défaut. CMAKE_BUILD_TYPE ne fonctionne pas bien sûr, et ajuster CMAKE_CONFIGURATION_TYPES ne fonctionne pas non plus, évidemment pour la même raison, ils s'appliquent uniquement aux makefiles Unix, pas aux projets Visual.

57voto

Maks Points 1072

J'ai vérifié cela avec Visual Studio 2015 et cmake 3.3 .

Réponse courte

Lien

cmake --build {BUILD_DIR_PATH} --target ALL_BUILD --config {BUILD_TYPE}

Exemple

cmake --build . --target ALL_BUILD --config Release

Réponse longue

cmake -G {GENERATOR_NAME} -B {BUILD_DIR_PATH} -S {SOURCE_DIR_PATH}

cmake --build {BUILD_DIR_PATH} --target ALL_BUILD --config {BUILD_TYPE}

Exemple

cmake -G "Visual Studio 14" -B "build/win32/x86" -S .    

cmake --build build/win32/x86 --target ALL_BUILD --config Release

Informations supplémentaires

  • -G - spécifie le nom du générateur

  • -B - spécifie le chemin du dossier de construction

  • -S - spécifie le chemin du dossier source

Éditer : Depuis CMake 3.13 le drapeau du dossier source est -S au lieu de -H non documenté

28voto

ComicSansMS Points 12749

Vous ne pouvez pas définir le type de build par défaut pour Visual Studio à partir de la ligne de commande.

Les générateurs Visual Studio de CMake vont générer les quatre profils standard (Debug, RelWithDebInfo, MinSizeRel et Release) et vous devez choisir celui que vous voulez construire depuis VS. Cela est dû au fait que l'information sur la configuration active ne fait pas partie des fichiers de projet générés par CMake, mais fait partie du fichier .suo généré par VS.

Si vous souhaitez automatiser la construction d'une configuration particulière, utilisez MSBuild à la place de VS, ce qui vous permet de spécifier une configuration à partir de la ligne de commande.

5voto

J'ai essayé les éléments ci-dessous qui ont fonctionné pour moi pour construire les binaires en mode release/debug sur Windows.

J'ai ajouté la ligne suivante dans le fichier racine CMakeLists.txt, juste au-dessus de la commande du projet:

SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "" FORCE)

J'ai utilisé la commande suivante pour définir la configuration en mode release:

cmake -DCMAKE_BUILD_TYPE=Release ..

J'ai utilisé cette commande pour construire la même chose en mode Release:

cmake --build . --config Release

Vous pouvez répéter la même procédure pour le mode debug également, ça fonctionne.

5voto

David Fong Points 56

Si votre générateur est un générateur à configuration unique tel que "Unix Makefiles" ou "Ninja", alors le type de build est spécifié par la variable CMAKE_BUILD_TYPE, qui peut être définie dans la commande configure en utilisant -DCMAKE_BUILD_TYPE:STRING=Release.

Pour les générateurs multi-configurations comme les générateurs Visual Studio et "Ninja Multi-Config", les configurations à générer sont spécifiées dans la commande de configuration via CMAKE_CONFIGURATION_TYPES, et la configuration à construire est spécifiée dans la commande build en utilisant l'argument --config comme --config Release. Depuis CMake 3.17, une valeur par défaut peut actuellement être spécifiée au moment de la configuration pour le générateur Ninja Multi-Config en définissant la valeur de la variable CMAKE_DEFAULT_BUILD_TYPE, qui sera utilisée si l'argument --config n'est pas passé à la commande de build. Pour le moment, une valeur par défaut ne peut pas être définie pour les générateurs Visual Studio.

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