2011-10-11 16 views
270

W gcc skompilowanego projektuDebug vs kin w CUpewnij

  • jak uruchomić cmake dla każdego typu docelowego (debug/release)?
  • jak określić debugowanie i zwolnić flagi C/C++ za pomocą cmake?
  • jak wyrazić, że główny plik wykonywalny zostanie skompilowany z g++ i jedną zagnieżdżoną biblioteką z gcc?

Odpowiedz

430

Z cmake zwykle zaleca się wykonanie "out of source" build. Utwórz swój CMakeLists.txt w katalogu głównym projektu. Następnie z katalogu głównego projektu:

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

I Debug (ponownie z głównego katalogu projektu):

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

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


można zmienić/dodać do flagi w swoim CMakeLists.txt poprzez CMAKE_C_FLAGS_DEBUG i CMAKE_C_FLAGS_RELEASE zmiennych, 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 więcej szczegółów.


Co do trzeciego pytania, nie jestem pewien, o co dokładnie pytasz. Program CMake powinien automatycznie wykrywać i używać kompilatora odpowiedniego dla różnych plików źródłowych.

+1

Można również zrobić 'CUpewnij -i ..' zamiast, tak CUpewnij będzie działać interaktywnie , z pytaniem, jakiego rodzaju kompilację sobie życzysz (None, Release, Debug, MinSizeRel, RelWithDebInfo). – thiagowfx

+0

@thiagowfx Opcja '-i' powoduje pojawienie się tego komunikatu o błędzie:' Tryb kreatora "cmake -i" nie jest już obsługiwany. Używam cmake 3.7.1 –

+0

Ładna obserwacja. Wygląda na to, że był przestarzały od wersji '3.0.0'. [Odnośnik] (https://cmake.org/cmake/help/v3.0/release/3.0.0.html#deprecated-and-removed-features). – thiagowfx

15

Informacje o flagach debugowania/zwolnienia można znaleźć w zmiennej CMAKE_BUILD_TYPE (należy ją podać jako cmake -DCMAKE_BUILD_TYPE=value). Zajmuje wartości jak Release, Debug itp

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

CUpewnij wykorzystuje rozszerzenie wybrać kompilator, więc po prostu wymienić swoje pliki .c.

Można zastąpić to z różnych ustawień:

Na przykład:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

Czy skompilować .c pliki z g ++. Powyższy link pokazuje również, jak wybrać określony kompilator dla C/C++.

-1

// CMakeLists.txt: zwolnić

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

// CMakeLists.txt: debug

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE) 
+1

Nie rozumiem, dlaczego to jest przegłosowane, to jest prawdziwy kod, który był używany w produkcji, btw, nie obchodzi mnie to. – sailfish009

+0

Może dlatego, że zgodnie z dokumentami CMake '' CMAKE_CONFIGURATION_TYPES'' zawiera możliwe wartości dla '' CMAKE_BUILD_TYPE''. Powinieneś ustawić to drugie, jak sugerują inne odpowiedzi. Może twoje rozwiązanie działa, ponieważ ogranicza możliwe wybory do tego, które chciałbyś mieć. – bjhend