2011-10-11 8 views
270

En un proyecto compilado GCC,depuración vs lanzamiento en CMAKE

  • cómo ejecutar cmake para cada tipo de destino (debug/release)?
  • cómo especificar depurar y liberar indicadores C/C++ utilizando cmake?
  • cómo expresar que el ejecutable principal se compilará con g++ y una biblioteca anidada con gcc?

Respuesta

430

Con cmake, generalmente se recomienda hacer un "out of source" build. Crea tu CMakeLists.txt en la raíz de tu proyecto. Luego de la raíz de su proyecto:

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

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

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

Release/Debug se sumarán las banderas apropiadas para su compilador. También hay RelWithDebInfo y MinSizeRel configuraciones de compilación.


Puede modificar/añadir a las banderas de sus CMakeLists.txt vía CMAKE_C_FLAGS_DEBUG y CMAKE_C_FLAGS_RELEASE las variables, 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án pidiendo exactamente. CMake debería detectar automáticamente y usar el compilador apropiado para sus diferentes archivos fuente.

+1

También se puede hacer un 'cmake -i ..' lugar, por lo cmake se ejecutará de forma interactiva , preguntándole qué tipo de construcción quiere (None, Release, Debug, MinSizeRel, RelWithDebInfo). – thiagowfx

+0

@thiagowfx La opción '-i' da como resultado este mensaje de error:' El modo asistente "cmake -i" ya no es compatible. Estoy usando cmake 3.7.1 –

+0

Bonita observación. Parece que estaba en desuso desde la versión '3.0.0'. [Referencia] (https://cmake.org/cmake/help/v3.0/release/3.0.0.html#deprecated-and-removed-features). – thiagowfx

15

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

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

cmake utiliza la extensión para elegir el compilador, por lo que sólo el nombre de su archivos .c.

Puede reemplazar esto con varias configuraciones:

Por ejemplo:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

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

-1

// CMakeLists.txt: liberar

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

// CMakeLists.txt: depuración

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

no entiendo por qué es que esto se votó, es un código real que se usa en producción, por cierto, no me importa. – sailfish009

+0

Quizás porque de acuerdo con los documentos de CMake '' CMAKE_CONFIGURATION_TYPES'' contiene los valores posibles para '' CMAKE_BUILD_TYPE''. Por lo tanto, debe establecer esta última como sugieren las otras respuestas. Tal vez su solución funcione porque limita las opciones posibles a la que le gustaría tener. – bjhend

Cuestiones relacionadas