Debug vs Release w CMake

W opracowanym projekcie GCC,

  • Jak uruchomić CMake dla każdego typu docelowego (debug/release)?
  • Jak określić Debug i zwolnić flagi C/C++ używając CMake?
  • Jak wyrazić, że główny plik wykonywalny zostanie skompilowany z g++ i jedną zagnieżdżoną biblioteką z gcc?
 311
Author: Peter Mortensen, 2011-10-11

4 answers

W przypadku CMake zaleca się wykonanie kompilacji"out of source" . Utwórz swoją CMakeLists.txt w katalogu głównym projektu. Następnie z korzenia twojego projektu:

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

I dla Debug (znowu z korzenia twojego projektu):

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

Release / Debug doda odpowiednie flagi dla Twojego kompilatora. Istnieją również konfiguracje RelWithDebInfo i MinSizeRel.


Możesz modyfikować/dodawać do FLAG w swoim CMakeLists.txt za pomocą zmiennych CMAKE_C_FLAGS_DEBUG i CMAKE_C_FLAGS_RELEASE , np.:

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

Zobacz CMAKE_BUILD_TYPE aby uzyskać więcej szczegółów.


Jeśli chodzi o Twoje trzecie pytanie, nie jestem pewien, o co dokładnie pytasz. CMake powinien automatycznie wykrywać i używać kompilatora odpowiedniego dla różnych plików źródłowych.
 492
Author: kb1ooo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 03:38:19

Znaczniki debugowania / wydania znajdują się w zmiennej CMAKE_BUILD_TYPE (przekazujesz ją jako cmake -DCMAKE_BUILD_TYPE=value). Przyjmuje takie wartości jak Release, Debug, itd.

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

Cmake używa rozszerzenia do wyboru kompilatora, więc po prostu nazwij swoje pliki .c.

Możesz to zmienić za pomocą różnych ustawień:

Na przykład:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

By skompilować .pliki c z g++. Powyższy link pokazuje również jak wybrać konkretny kompilator dla C / C++.

 18
Author: duncan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-05 14:34:17

// Cmakelisty.txt: release

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

// Cmakelisty.txt: debug

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
 3
Author: sailfish009,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-18 07:43:03

Zamiast bezpośrednio manipulować strunami CMAKE_CXX_FLAGS (co można zrobić przyjemniej używając string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") btw), możesz użyć add_compiler_options:

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

Dodałoby to określone ostrzeżenia do wszystkich typów kompilacji, ale tylko podane flagi debugowania do DEBUG kompilacji. Zauważ, że opcje kompilacji są przechowywane jako lista CMake, która jest tylko ciągiem znaków oddzielającym jej elementy średnikami ;.

 1
Author: sebastian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 15:30:10