web-dev-qa-db-fra.com

Debug vs Release dans CMake

Dans un projet compilé par GCC,

  • Comment exécuter CMake pour chaque type de cible (debug/release)?
  • Comment spécifier des indicateurs de débogage et de publication C/C++ à l'aide de CMake?
  • Comment exprimer que l'exécutable principal sera compilé avec g++ et une bibliothèque imbriquée avec gcc?
367
Cartesius00

Avec CMake, il est généralement recommandé de faire une compilation "out of source" . Créez votre CMakeLists.txt à la racine de votre projet. Puis de la racine de votre projet:

mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make

Et pour Debug (toujours depuis la racine de votre projet):

mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Release/Debug ajoutera les indicateurs appropriés pour votre compilateur. Il existe également RelWithDebInfo et MinSizeRel configurations de construction.


Vous pouvez modifier/ajouter des indicateurs dans vos variables CMakeLists.txt via CMAKE_C_FLAGS_DEBUG et CMAKE_C_FLAGS_RELEASE, par exemple:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")

Voir CMAKE_BUILD_TYPE pour plus de détails.


En ce qui concerne votre troisième question, je ne suis pas sûr de ce que vous demandez exactement. CMake devrait automatiquement détecter et utiliser le compilateur approprié pour vos différents fichiers source.

585
kb1ooo

Pour les indicateurs de débogage/libération, voir la variable CMAKE_BUILD_TYPE (vous la transmettez sous la forme cmake -DCMAKE_BUILD_TYPE=value). Il prend des valeurs comme Release, Debug, etc.

http://cmake.org/Wiki/CMake_Useful_Variables#Compilers_and_Tools

cmake utilise l'extension pour choisir le compilateur, donc nommez simplement vos fichiers .c.

Vous pouvez remplacer cela avec différents paramètres:

Par exemple:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

Compilerait des fichiers .c avec g ++. Le lien ci-dessus montre également comment sélectionner un compilateur spécifique pour C/C++.

20
duncan

Au lieu de manipuler les chaînes CMAKE_CXX_FLAGS directement (ce qui pourrait être fait plus facilement en utilisant string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") btw), vous pouvez utiliser add_compiler_options:

add_compile_options(
  "-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
  "$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)

Cela ajouterait les avertissements spécifiés à tous les types de construction, mais uniquement les indicateurs de débogage donnés à la construction DEBUG. Notez que les options de compilation sont stockées dans une liste CMake, qui est simplement une chaîne séparant ses éléments par des points-virgules ;.

11
sebastian

// CMakeLists.txt: release

set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)

// CMakeLists.txt: débogage

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
3
sailfish009

Si vous souhaitez construire une configuration différente sans régénérer si vous l'utilisez, vous pouvez également exécuter cmake --build {$PWD} --config <cfg> Pour les outils de configuration multiple, choisissez <cfg> ex. Déboguer, libérer, MinSizeRel, RelWithDebInfo

https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir

1
Russel Waters