c++ - script - Debug vs Release en CMake
cmake in c (4)
// CMakeLists.txt: release
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
// CMakeLists.txt: debug
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
En un proyecto compilado de GCC,
- ¿Cómo ejecuto CMake para cada tipo de destino (depuración / lanzamiento)?
- ¿Cómo especifico las marcas de debug y release C / C ++ usando CMake?
- ¿Cómo expreso que el ejecutable principal se compilará con
g++
y una biblioteca anidada congcc
?
Con CMake, generalmente se recomienda hacer una compilación "fuera de la fuente" . Cree su CMakeLists.txt
en la raíz de su 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 tu proyecto):
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
Release
/ Debug
agregará los indicadores apropiados para su compilador. También hay configuraciones de compilación RelWithDebInfo
y MinSizeRel
.
Puede modificar / agregar a las banderas 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 tu tercera pregunta, no estoy seguro de lo que estás preguntando exactamente. CMake debería detectar y utilizar automáticamente el compilador adecuado para sus diferentes archivos de origen.
En lugar de manipular las cadenas CMAKE_CXX_FLAGS
directamente (lo que se podría hacer mejor usando una string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")
cierto), puede usar add_compiler_options
:
add_compile_options(
"-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
"$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)
Esto agregaría las advertencias especificadas a todos los tipos de compilación, pero solo los indicadores de depuración dados a la compilación DEBUG
. Tenga en cuenta que las opciones de compilación se almacenan como una lista CMake, que es solo una cadena que separa sus elementos por punto ;
coma ;
.
Para los indicadores de debug / release, vea 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 compilador, así que solo nombre sus archivos .c.
Puede anular esto con varias configuraciones:
Por ejemplo:
set_source_files_properties(yourfile.c LANGUAGE CXX)
Compilaría archivos .c con g ++. El enlace anterior también muestra cómo seleccionar un compilador específico para C / C ++.