Dans un projet compilé par GCC,
g++
et une bibliothèque imbriquée avec gcc
?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.
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++.
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 ;
.
// CMakeLists.txt: release
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
// CMakeLists.txt: débogage
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
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