it-swarm.com.de

Debug vs Release in CMake

In einem GCC-kompilierten Projekt

  • Wie führe ich CMake für jeden Zieltyp (Debug/Release) aus?
  • Wie kann ich mit CMake Debugging und Freigabe von C/C++ - Flags festlegen?
  • Wie drücke ich aus, dass die ausführbare Hauptdatei mit g++ und eine verschachtelte Bibliothek mit gcc kompiliert wird?
367
Cartesius00

Bei CMake wird generell empfohlen, ein "out of source" Build durchzuführen. Erstellen Sie Ihren 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 (erneut aus dem Stammverzeichnis 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 die Flags in Ihrem CMakeLists.txt über CMAKE_C_FLAGS_DEBUG und CMAKE_C_FLAGS_RELEASE ändern/ergänzen, z.

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

Siehe CMAKE_BUILD_TYPE für weitere Details.


Bei Ihrer dritten Frage bin ich mir nicht sicher, was Sie genau fragen. CMake sollte den für Ihre verschiedenen Quelldateien geeigneten Compiler automatisch erkennen und verwenden.

585
kb1ooo

Informationen zu Debug-/Release-Flags finden Sie in der Variablen CMAKE_BUILD_TYPE (Sie übergeben sie als cmake -DCMAKE_BUILD_TYPE=value). Es werden Werte wie Release, Debug usw. verwendet.

http://cmake.org/Wiki/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:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

Kompiliert .c-Dateien mit g ++. Der obige Link zeigt auch, wie Sie einen bestimmten Compiler für C/C++ auswählen.

20
duncan

Anstatt die Zeichenfolgen von CMAKE_CXX_FLAGS direkt zu bearbeiten (was mit string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") besser möglich ist), können Sie add_compiler_options verwenden:

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

Dies würde allen Build-Typen die angegebenen Warnungen hinzufügen, aber nur die angegebenen Debugging-Flags für den Build DEBUG. Beachten Sie, dass Kompilierungsoptionen als CMake-Liste gespeichert werden. Dies ist lediglich eine Zeichenfolge, die die Elemente durch Semikolons ; trennt.

11
sebastian

// CMakeLists.txt: freigeben

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

// CMakeLists.txt: debuggen

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

Wenn Sie eine andere Konfiguration erstellen möchten, ohne sie neu zu generieren, können Sie auch cmake --build {$PWD} --config <cfg> ausführen. Wählen Sie für Tools mit mehreren Konfigurationen <cfg> aus. Debug, Release, MinSizeRel, RelWithDebInfo

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

1
Russel Waters