Con CMake, generalmente se recomienda hacer una compilación "fuera de la fuente" . Crea tu CMakeLists.txten la raíz de tu proyecto. Luego, desde la raíz de su 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/ Debugagregará las banderas apropiadas para su compilador. También hay RelWithDebInfoy MinSizeRelconfiguraciones de construcción.
Puede modificar / agregar a las banderas especificando un archivo de cadena de herramientas en el que puede agregar CMAKE_C_FLAGS_DEBUGy CMAKE_C_FLAGS_RELEASEvariables, 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 y usar automáticamente el compilador apropiado para sus diferentes archivos fuente.
cmake -i ..en su lugar, por lo que cmake se ejecutará de forma interactiva, preguntándole qué tipo de compilación desea (Ninguno, Release, Debug, MinSizeRel, RelWithDebInfo).-iopción produce este mensaje de error:The "cmake -i" wizard mode is no longer supported.. Estoy usando cmake 3.7.13.0.0. Referencia .CMAKE_BUILD_TYPEno se establece, cmake no elegirá ningún tipo de compilación predeterminado, por lo tanto, la línea de comando del compilador generado no coincidirá con ninguna configuración de compilación.Para las marcas de depuración / liberación, vea la
CMAKE_BUILD_TYPEvariable (la pasa comocmake -DCMAKE_BUILD_TYPE=value). Toma valores comoRelease,Debug, etc.https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
cmake usa la extensión para elegir el compilador, así que solo nombra tus archivos .c.
Puede anular esto con varias configuraciones:
Por ejemplo:
Compilaría archivos .c con g ++. El enlace de arriba también muestra cómo seleccionar un compilador específico para C / C ++.
fuente
En lugar de manipular las
CMAKE_CXX_FLAGScadenas directamente (lo que se podría hacer mejor usandostring(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")btw), puede usaradd_compiler_options:Esto agregaría las advertencias especificadas a todos los tipos de compilación, pero solo los indicadores de depuración dados a la
DEBUGcompilación. 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;y coma .fuente
list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3")agregará un punto y coma antes de que -g3 termine el comando y comience un nuevo comando -g3 que seguramente fallará?CMAKE_CXX_FLAGSes una lista cmake sino una cadena de banderas de línea de comando separadas por espacios. Encuentro ese comportamiento inconsistente ...Si desea crear una configuración diferente sin regenerar si está utilizando, también puede ejecutar
cmake --build {$PWD} --config <cfg>Para herramientas de configuración múltiple, elija<cfg>ej. Depurar, liberar, MinSizeRel, RelWithDebInfohttps://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
fuente
--configopción sin ningún resultado. No afecta a la$<CONFIG>variable como lo-DCMAKE_BUILD_TYPE=hace.// CMakeLists.txt: release
// CMakeLists.txt: debug
fuente
CMAKE_CONFIGURATION_TYPEScontiene los valores posibles paraCMAKE_BUILD_TYPE. Por lo tanto, debe configurar este último como sugieren las otras respuestas. Tal vez su solución funcione porque limita las posibles opciones a la que le gustaría tener.