volevo solo aggiungere alcune informazioni di fondo (per esempio discusso qui how to setup cmake_c/xx_flags per toolchain?).
In breve, le variabili CMAKE_<LANG>_FLAGS
sono memorizzate nella cache in base alla progettazione negli script CMake<Lang>Information.cmake
(ovvero è possibile modificarle nell'applicazione GUI di CMake dopo il passaggio di configurazione).
Quindi è necessario - se li si imposta nel file Toolchain - inserirli prima nella cache. Lo script di CMake (eseguito dopo il file Toolchain) non viene fornito con lo FORCE
, quindi non lo sovrascriverà più.
Date un'occhiata in CMakeCInformation.cmake (dalla quota \ 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.")
Come si può vedere, il mezzo ufficiale per farlo sarebbe utilizzando CMAKE_C_FLAGS_INIT
per iniettare flag addizionali. Il problema è che le successive modifiche nel file Toolchain non verrebbero riconosciute (la cache non verrà sovrascritta, vedi sopra).
Tenuto conto di tutto ciò, la soluzione temporanea è la scelta giusta.Per essere veramente sicuri - perché il file toolchain viene analizzato due volte durante il processo di configurazione/Generation - anche si potrebbe aggiungere un UNSET
chiamata prima di impostare CMAKE_C_FLAGS
nel file toolchain:
UNSET(CMAKE_C_FLAGS CACHE)
SET(CMAKE_C_FLAGS "-std=gnu99" CACHE STRING "" FORCE)
Un'altra soluzione spesso trovato è quello di usare qualcosa di simile :
add_definitions(" -std=gnu99")
per iniettare flag di compilazione (ma questo non è configurato per la configurazione, poiché le definizioni di variabile sono). Vedi anche CMake clang and c++0x
Con CMake 2.8.12 ci sono stati nuovi comandi introdotti, in modo che si possa fare (non testato, solo per mostrare le possibilità):
add_compile_options("$<$<CONFIG:RELASE>:-std=gnu99>")
add_compile_options("$<$<CONFIG:DEBUG>:-std=gnu99 -g3>")
Vedi What is the modern method for setting general compile flags in CMake? e CMake generator expression, differentiate C/C++ code per maggiori informazioni su questo.
Grazie! Ho avuto questo problema esatto. – DouglasHeriot