Bei CMake wird im Allgemeinen empfohlen, einen "Out-of-Source" -Build durchzuführen . Erstellen Sie Ihre CMakeLists.txt
im Stammverzeichnis Ihres Projekts. Dann von der Wurzel Ihres Projekts:
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Und für Debug
(wieder von der Wurzel Ihres Projekts):
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
Release
/ Debug
fügt die entsprechenden Flags für Ihren Compiler hinzu. Es gibt auch RelWithDebInfo
und MinSizeRel
Build-Konfigurationen.
Sie können durch die Angabe einer auf die Flags ändern / hinzufügen Toolchain - Datei , in der Sie hinzufügen können , CMAKE_C_FLAGS_DEBUG
und CMAKE_C_FLAGS_RELEASE
Variablen, zum Beispiel:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
Weitere Informationen finden Sie unter CMAKE_BUILD_TYPE .
Was Ihre dritte Frage betrifft, bin ich mir nicht sicher, was Sie genau fragen. CMake sollte den für Ihre verschiedenen Quelldateien geeigneten Compiler automatisch erkennen und verwenden.
cmake -i ..
stattdessen auch eine ausführen, damit cmake interaktiv ausgeführt wird und Sie gefragt werden, welche Art von Build Sie möchten (Keine, Release, Debug, MinSizeRel, RelWithDebInfo).-i
Option @thiagowfx führt zu dieser Fehlermeldung :The "cmake -i" wizard mode is no longer supported.
. Ich benutze cmake 3.7.13.0.0
. Referenz .CMAKE_BUILD_TYPE
cmake , wenn es nicht festgelegt ist, keinen Standard-Build-Typ auswählt, sodass die generierte Compiler-Befehlszeile keiner Build-Konfiguration entspricht.Informationen zu Debug- / Release-Flags finden Sie in der
CMAKE_BUILD_TYPE
Variablen (Sie übergeben sie alscmake -DCMAKE_BUILD_TYPE=value
). Es braucht Werte wieRelease
,Debug
usw.https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
cmake verwendet die Erweiterung, um den Compiler auszuwählen. Benennen Sie also einfach Ihre Dateien .c.
Sie können dies mit verschiedenen Einstellungen überschreiben:
Zum Beispiel:
Würde .c-Dateien mit g ++ kompilieren. Der obige Link zeigt auch, wie Sie einen bestimmten Compiler für C / C ++ auswählen.
quelle
Anstatt die
CMAKE_CXX_FLAGS
Zeichenfolgen direkt zu manipulieren (wasstring(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")
übrigens besser möglich wäre), können Sie Folgendes verwendenadd_compiler_options
:Dies würde die angegebenen Warnungen zu allen Build-Typen hinzufügen, aber nur die angegebenen Debugging-Flags zum
DEBUG
Build. Beachten Sie, dass Kompilierungsoptionen als CMake-Liste gespeichert werden, bei der es sich lediglich um eine Zeichenfolge handelt, die ihre Elemente durch Semikolons trennt;
.quelle
list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3")
ein Semikolon hinzufügen , bevor -g3 den Befehl beendet und einen neuen Befehl -g3 beginnen , die sicherlich fehl?CMAKE_CXX_FLAGS
handelt sich nicht um eine cmake-Liste, sondern um eine Zeichenfolge von durch Leerzeichen getrennten Befehlszeilenflags. Ich finde dieses Verhalten inkonsistent ...Wenn Sie eine andere Konfiguration erstellen möchten, ohne sie neu zu generieren, können Sie
cmake --build {$PWD} --config <cfg>
für Tools mit mehreren Konfigurationen auch Folgendes auswählen:<cfg>
ex. Debug, Release, MinSizeRel, RelWithDebInfohttps://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
quelle
--config
Option ohne Ergebnis zu spielen . Es wirkt sich nicht auf$<CONFIG>
Variablen aus-DCMAKE_BUILD_TYPE=
.// CMakeLists.txt: release
// CMakeLists.txt: Debug
quelle
CMAKE_CONFIGURATION_TYPES
die möglichen Werte für enthaltenCMAKE_BUILD_TYPE
. Sie sollten also Letzteres einstellen, wie die anderen Antworten vermuten lassen. Vielleicht funktioniert Ihre Lösung, weil sie die Auswahlmöglichkeiten auf die beschränkt, die Sie haben möchten.