Yo sólo quería añadir algo de información (por ejemplo, discutido aquí how to setup cmake_c/xx_flags per toolchain?).
En resumen, las variables CMAKE_<LANG>_FLAGS
están en caché por diseño en los scripts CMake<Lang>Information.cmake
(lo que significa que puede cambiarlos en la aplicación GUI de CMake después del paso de configuración).
Así que hay que - si la configuración en el archivo Toolchain - los puso en la memoria caché en primer lugar. La propia secuencia de comandos de CMake (ejecutada después del archivo Toolchain) no viene con un FORCE
, por lo que no se sobreescribirá nuevamente.
echar un vistazo a CMakeCInformation.cmake (de share \ cmake-2.8 \ Modules):
set(CMAKE_C_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_C_FLAGS_INIT}")
# avoid just having a space as the initial value for the cache
if(CMAKE_C_FLAGS_INIT STREQUAL " ")
set(CMAKE_C_FLAGS_INIT)
endif()
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_INIT}" CACHE STRING
"Flags used by the compiler during all build types.")
Como se puede ver, la forma oficial de hacerlo sería utilizar CMAKE_C_FLAGS_INIT
para inyectar banderas adicionales. El problema es que los cambios posteriores en el archivo Toolchain no se reconocerán (la memoria caché no se sobrescribirá, ver más arriba).
Tomados en cuenta todo esto, la solución temporal es la elección correcta.Para estar realmente seguro - porque el archivo Toolchain se analiza dos veces durante el proceso de configuración/Generación - incluso se podría añadir una llamada UNSET
antes de CMAKE_C_FLAGS
en su archivo de cadena de herramientas:
UNSET(CMAKE_C_FLAGS CACHE)
SET(CMAKE_C_FLAGS "-std=gnu99" CACHE STRING "" FORCE)
Otra solución frecuentemente encontrado es usar algo como :
add_definitions(" -std=gnu99")
para inyectar indicadores de compilación (pero esto no es consciente de la configuración de compilación, ya que las definiciones de las variables son). También podría CMake clang and c++0x
Con CMake 2.8.12 hubo nuevos comandos introducidos, por lo que podría hacer (no probado, sólo para mostrar las posibilidades):
add_compile_options("$<$<CONFIG:RELASE>:-std=gnu99>")
add_compile_options("$<$<CONFIG:DEBUG>:-std=gnu99 -g3>")
Ver What is the modern method for setting general compile flags in CMake? y CMake generator expression, differentiate C/C++ code para más información sobre esto.
¡Gracias! Tuve este problema exacto. – DouglasHeriot