Con CMake, generalmente se recomienda hacer una compilación "fuera de la fuente" . Crea tu CMakeLists.txt
en 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
/ Debug
agregará las banderas apropiadas para su compilador. También hay RelWithDebInfo
y MinSizeRel
configuraciones de construcción.
Puede modificar / agregar a las banderas especificando un archivo de cadena de herramientas en el que puede agregar CMAKE_C_FLAGS_DEBUG
y CMAKE_C_FLAGS_RELEASE
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á 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).-i
opció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_TYPE
no 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_TYPE
variable (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_FLAGS
cadenas 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
DEBUG
compilació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_FLAGS
es 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
--config
opció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_TYPES
contiene 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.