2011-10-11 19 views
270

In un progetto compilato GCC,debug vs uscita in CMAKE

  • come eseguire cmake per ogni tipo di destinazione (debug/release)?
  • come specificare il debug e rilasciare i flag C/C++ utilizzando cmake?
  • come esprimere che l'eseguibile principale verrà compilato con g++ e una libreria nidificata con gcc?

risposta

430

Con cmake, in genere è consigliabile eseguire un "out of source" build. Crea il tuo CMakeLists.txt nella radice del tuo progetto. Poi dalla radice del proprio progetto:

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

E per Debug (ancora una volta dalla radice del progetto):

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

Release/Debug aggiungerà i flag appropriati per il compilatore. Esistono anche configurazioni di build RelWithDebInfo e MinSizeRel.


È possibile modificare/aggiungere alle bandiere nelle vostre CMakeLists.txt via CMAKE_C_FLAGS_DEBUG e CMAKE_C_FLAGS_RELEASE variabili, ad es .:

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

Vedere CMAKE_BUILD_TYPE per maggiori dettagli.


Per quanto riguarda il 3 ° domanda, io non sono sicuro di quello che stai chiedendo esattamente. CMake dovrebbe rilevare automaticamente e utilizzare il compilatore appropriato per i diversi file sorgente.

+1

È anche possibile fare un 'CMake -i ..' invece, in modo da CMake verrà eseguito in modo interattivo , chiedendoti quale tipo di build vuoi (None, Release, Debug, MinSizeRel, RelWithDebInfo).L'opzione – thiagowfx

+0

@thiagowfx '-i' restituisce questo messaggio di errore:' La modalità guidata "cmake -i" non è più supportata. Sto usando cmake 3.7.1 –

+0

Bella osservazione. Sembra che fosse deprecato dalla versione '3.0.0'. [Riferimento] (https://cmake.org/cmake/help/v3.0/release/3.0.0.html#deprecated-and-removed-features). – thiagowfx

15

Per i flag di debug/rilascio, vedere la variabile CMAKE_BUILD_TYPE (la si passa come cmake -DCMAKE_BUILD_TYPE=value). Ci vogliono valori come Release, Debug, ecc

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

CMake utilizza l'estensione di scegliere il compilatore, quindi basta citarne il tuo file .c.

È possibile sostituire questo con le varie impostazioni:

Ad esempio:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

Sarebbe compilare i file .c con g ++. Il link sopra mostra anche come selezionare un compilatore specifico per C/C++.

-1

// CMakeLists.txt: rilasciare

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

// CMakeLists.txt: eseguire il debug

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

non capisco perché questo viene giù votato, è un codice reale che viene utilizzato nella produzione, ma non mi interessa. – sailfish009

+0

Forse perché in base ai documenti CMake '' CMAKE_CONFIGURATION_TYPES'' contiene i possibili valori per '' CMAKE_BUILD_TYPE''. Quindi dovresti impostare quest'ultimo come suggeriscono le altre risposte. Forse la tua soluzione funziona perché limita le possibili scelte a quella che vorresti avere. – bjhend