Ответ 1
Есть куча предопределенных переменных CMake в зависимости от используемого вами компилятора:
if (MSVC)
set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE")
set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGSS_GO_HERE")
set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" )
endif ()
if (BORLAND)
set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE")
set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGS_GO_HERE")
set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" )
endif ()
if (CMAKE_COMPILER_IS_GNUCXX)
set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE")
set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGS_GO_HERE")
set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" )
endif ()
Если вы хотите, чтобы ваши параметры компилятора переопределяли и сохранялись в сгенерированном CMakeCache:
if (CMAKE_COMPILER_IS_GNUCXX)
set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE"
CACHE STRING "g++ Compiler Flags for All Builds" FORCE)
set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGS_GO_HERE"
CACHE STRING "g++ Compiler Flags for Debug Builds" FORCE)
set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE"
CACHE STRING "g++ Compiler Flags for Release Builds" FORCE)
endif ()