Depuración frente a versión en CMAKE

En un proyecto comstackdo GCC,

  • cómo ejecutar cmake para cada tipo de destino (depuración / publicación)?
  • cómo especificar depurar y liberar indicadores C / C ++ usando cmake ?
  • cómo express que el ejecutable principal se comstackrá con g++ y una biblioteca anidada con gcc ?

Con cmake, generalmente se recomienda hacer una comstackción “fuera de fuente” . Crea tu CMakeLists.txt en la raíz de tu proyecto. Luego, desde la raíz de tu proyecto:

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

Y para Debug (nuevamente desde la raíz de su proyecto):

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

Release / Debug agregará los indicadores apropiados para su comstackdor. También hay configuraciones de comstackción RelWithDebInfo y MinSizeRel .


Puede modificar / agregar a los indicadores en su CMakeLists.txt través de las variables CMAKE_C_FLAGS_DEBUG y CMAKE_C_FLAGS_RELEASE , por ejemplo:

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

Ver CMAKE_BUILD_TYPE para más detalles.


En cuanto a su tercera pregunta, no estoy seguro de lo que está preguntando exactamente. CMake debería detectar automáticamente y usar el comstackdor apropiado para sus diferentes archivos fuente.

Para los indicadores de depuración / liberación, consulte la variable CMAKE_BUILD_TYPE (la pasa como cmake -DCMAKE_BUILD_TYPE=value ). Toma valores como Release , Debug , etc.

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

cmake usa la extensión para elegir el comstackdor, así que solo nombre sus archivos .c.

Puede anular esto con varias configuraciones:

Por ejemplo:

 set_source_files_properties(yourfile.c LANGUAGE CXX) 

Comstackría archivos .c con g ++. El enlace de arriba también muestra cómo seleccionar un comstackdor específico para C / C ++.

// CMakeLists.txt: lanzamiento

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

// CMakeLists.txt: depuración

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

En lugar de manipular las cadenas CMAKE_CXX_FLAGS directamente (lo que se podría hacer de manera más agradable usando list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3") btw), puede usar add_compiler_options :

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

Esto agregaría las advertencias especificadas a todos los tipos de comstackción, pero solo los indicadores de depuración proporcionados a la comstackción DEBUG . Tenga en cuenta que las opciones de comstackción se almacenan como una lista de cmake, que es solo una cadena que separa sus elementos por punto ; coma ; .