c++ in - Debug vs Release en CMake




course script (5)

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 ++.

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 con gcc ?

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 ; .


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.


// CMakeLists.txt: release

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

// CMakeLists.txt: debug

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

Evite sqlite3_clear_bindings (stmt);

El código en la prueba establece los enlaces cada vez que debe ser suficiente.

La introducción de la API C de los documentos SQLite dice

Antes de llamar a sqlite3_step () por primera vez o inmediatamente después de sqlite3_reset (), la aplicación puede invocar una de las interfaces sqlite3_bind () para adjuntar valores a los parámetros. Cada llamada a sqlite3_bind () anula los enlaces anteriores en el mismo parámetro

(ver: sqlite.org/cintro.html ). No hay nada en los documentos para esa función que indique que debe llamarlo además de simplemente establecer los enlaces.

Más detalles: http://www.hoogli.com/blogs/micro/index.html#Avoid_sqlite3_clear_bindings()





c++ c gcc cmake