Avec CMake, il est généralement recommandé de faire une build "hors source" . Créez votre CMakeLists.txt
à la racine de votre projet. Puis à partir de la racine de votre projet:
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Et pour Debug
(encore une fois à partir de la racine de votre projet):
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
Release
/ Debug
ajoutera les drapeaux appropriés pour votre compilateur. Il existe également des configurations RelWithDebInfo
et MinSizeRel
construire.
Vous pouvez modifier / ajouter aux indicateurs en spécifiant un fichier de chaîne d'outils dans lequel vous pouvez ajouter CMAKE_C_FLAGS_DEBUG
et des CMAKE_C_FLAGS_RELEASE
variables, 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.
Quant à votre troisième question, je ne sais pas exactement ce que vous demandez. CMake devrait automatiquement détecter et utiliser le compilateur approprié pour vos différents fichiers source.
cmake -i ..
place, afin que cmake s'exécute de manière interactive, vous demandant quel type de build vous souhaitez (None, Release, Debug, MinSizeRel, RelWithDebInfo).-i
options de ce message d'erreur:The "cmake -i" wizard mode is no longer supported.
. J'utilise cmake 3.7.13.0.0
. Référence .CMAKE_BUILD_TYPE
n'est pas défini, cmake ne choisira aucun type de build par défaut, donc la ligne de commande du compilateur généré ne correspondra à aucune configuration de build.Pour les indicateurs de débogage / libération, voir la
CMAKE_BUILD_TYPE
variable (vous la passez commecmake -DCMAKE_BUILD_TYPE=value
). Il prend des valeurs telles queRelease
,Debug
, etc.https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
cmake utilise l'extension pour choisir le compilateur, il suffit donc de nommer vos fichiers .c.
Vous pouvez remplacer cela avec différents paramètres:
Par exemple:
Compilerait des fichiers .c avec g ++. Le lien ci-dessus montre également comment sélectionner un compilateur spécifique pour C / C ++.
la source
Au lieu de manipuler
CMAKE_CXX_FLAGS
directement les chaînes (ce qui pourrait être mieux fait en utilisantstring(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")
btw), vous pouvez utiliseradd_compiler_options
:Cela ajouterait les avertissements spécifiés à tous les types de build, mais seulement les drapeaux de débogage donnés à la
DEBUG
build. Notez que les options de compilation sont stockées sous forme de liste CMake, qui n'est qu'une chaîne séparant ses éléments par des points-virgules;
.la source
list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3")
N'ajoutera pas de point-virgule avant que -g3 ne termine la commande et démarre une nouvelle commande -g3 qui échouera sûrement?CMAKE_CXX_FLAGS
n'est pas une liste cmake mais une chaîne d'indicateurs de ligne de commande séparés par des espaces. Je trouve ce comportement incohérent ...Si vous souhaitez créer une configuration différente sans régénérer si vous utilisez, vous pouvez également exécuter
cmake --build {$PWD} --config <cfg>
Pour les outils de configuration multiple, choisissez<cfg>
ex. Debug, Release, MinSizeRel, RelWithDebInfohttps://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
la source
--config
option sans aucun résultat. Il n'affecte pas la$<CONFIG>
variable comme le-DCMAKE_BUILD_TYPE=
fait.// CMakeLists.txt: libération
// CMakeLists.txt: débogage
la source
CMAKE_CONFIGURATION_TYPES
contient les valeurs possibles pourCMAKE_BUILD_TYPE
. Vous devez donc définir ce dernier comme le suggèrent les autres réponses. Peut-être que votre solution fonctionne car elle limite les choix possibles à celui que vous aimeriez avoir.