From 3922e7c5ee574e0006ea695965c68909fbf3478d Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Thu, 31 Mar 2016 20:20:01 +0200 Subject: [PATCH] CMake: Stop the OC_*_FLAGS song and dance CMake handles adding un-cached flags properly, so we don't have to force flags into the cache. --- CMakeLists.txt | 70 ++++++++++---------------------------------------- 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 264986a88..2350e402b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,96 +45,52 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ${PROJECT_FOLDERS}) ############################################################################ include(CheckCXXCompilerFlag) -set(OC_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -separate_arguments(OC_CXX_FLAGS) -set(OC_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) -separate_arguments(OC_CXX_FLAGS_DEBUG) -set(OC_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) -separate_arguments(OC_EXE_LINKER_FLAGS) -set(OC_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG}) -separate_arguments(OC_EXE_LINKER_FLAGS_DEBUG) - CHECK_CXX_COMPILER_FLAG("-std=gnu++14" USE_GCC_STD_14) if(USE_GCC_STD_14) - list(APPEND OC_CXX_FLAGS "-std=gnu++14") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14") endif() if(MSVC) # Disable non-standard conversion from string literal to (nonconst) char* - list(APPEND OC_CXX_FLAGS /Zc:strictStrings) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:strictStrings") - list(APPEND OC_CXX_FLAGS /MP) - list(REMOVE_ITEM OC_CXX_FLAGS_DEBUG /Gm) + # Enable multi-core builds + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # Activate edit-and-continue - list(REMOVE_ITEM OC_CXX_FLAGS_DEBUG /Zi) - list(APPEND OC_CXX_FLAGS_DEBUG /ZI /Gy) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} /ZI /Gy") # do not link the release CRT in debug builds - list(APPEND OC_EXE_LINKER_FLAGS_DEBUG "/NODEFAULTLIB:MSVCRT") + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:MSVCRT") set(HAVE_PRECOMPILED_HEADERS ON CACHE INTERNAL "Compiler supports precompiled headers") # Suppress warnings about "non-secure" functions add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) # Disable warning C4244: 'conversion' conversion from 'type1' to 'type2', possible loss of data - list(APPEND OC_CXX_FLAGS "/wd4244") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244") # Disable warning C4267: 'var' : conversion from 'size_t' to 'type', possible loss of data (64 bit build only) - list(APPEND OC_CXX_FLAGS "/wd4267") -endif() - -if(CMAKE_COMPILER_IS_GNUCXX) - list(APPEND OC_CXX_FLAGS -Wall -Wextra -Wredundant-decls -Wendif-labels -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Winit-self -Wsign-promo -Wno-reorder -Wno-unused-parameter -Wnon-virtual-dtor -Woverloaded-virtual) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267") endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - list(APPEND OC_CXX_FLAGS -Wall -Wextra -Wextra-tokens -Wpointer-arith -Wno-cast-align -Wno-reorder -Wno-unused-parameter -Wnon-virtual-dtor -Woverloaded-virtual) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wextra-tokens -Wpointer-arith -Wno-cast-align -Wno-reorder -Wno-unused-parameter -Wnon-virtual-dtor -Woverloaded-virtual") +elseif(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wredundant-decls -Wendif-labels -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Winit-self -Wsign-promo -Wno-reorder -Wno-unused-parameter -Wnon-virtual-dtor -Woverloaded-virtual") endif() if(WIN32 AND MINGW) # Activate DEP and ASLR - list(APPEND OC_EXE_LINKER_FLAGS -Wl,--nxcompat -Wl,--dynamicbase) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") endif() if(UNIX) - # Don't put this into CMAKE_CXX_FLAGS because otherwise it is cached, - # and when the path is changed both the old and new definition appears - # in the list of flags. add_definitions("-DOC_SYSTEM_DATA_DIR=\"${CMAKE_INSTALL_PREFIX}/share/games/openclonk\"") endif() if(APPLE) - list(APPEND OC_CXX_FLAGS -fobjc-arc) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc") endif() -if(OC_CXX_FLAGS) - list(REMOVE_DUPLICATES OC_CXX_FLAGS) -endif() -set(CMAKE_CXX_FLAGS "" CACHE STRING "C++ compiler flags" FORCE) -foreach(FLAG ${OC_CXX_FLAGS}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}" CACHE STRING "C++ compiler flags" FORCE) -endforeach() -if(OC_CXX_FLAGS_DEBUG) - list(REMOVE_DUPLICATES OC_CXX_FLAGS_DEBUG) -endif() -set(CMAKE_CXX_FLAGS_DEBUG "" CACHE STRING "Flags used by the compiler during debug builds." FORCE) -foreach(FLAG ${OC_CXX_FLAGS_DEBUG}) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAG}" CACHE STRING "Flags used by the compiler during debug builds." FORCE) -endforeach() -if(OC_EXE_LINKER_FLAGS) - list(REMOVE_DUPLICATES OC_EXE_LINKER_FLAGS) -endif() -set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "Flags used by the linker." FORCE) -foreach(FLAG ${OC_EXE_LINKER_FLAGS}) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}" CACHE STRING "Flags used by the linker." FORCE) -endforeach() -if(OC_EXE_LINKER_FLAGS_DEBUG) - list(REMOVE_DUPLICATES OC_EXE_LINKER_FLAGS_DEBUG) -endif() -set(CMAKE_EXE_LINKER_FLAGS_DEBUG "" CACHE STRING "Flags used by the linker during debug builds." FORCE) -foreach(FLAG ${OC_EXE_LINKER_FLAGS_DEBUG}) - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${FLAG}" CACHE STRING "Flags used by the linker during debug builds." FORCE) -endforeach() - ############################################################################ # Check for compiler quirks and features ############################################################################