Use C++11 if possible
This allows the use of more efficient (i.e. faster) data structures like unordered_map.
This commit is contained in:
parent
f60fd0a9aa
commit
0aee764203
@ -7,8 +7,67 @@ set(VERSION_MAJOR 1)
|
||||
set(VERSION_MINOR 0)
|
||||
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-std=c++0x -Wall -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -std=c++0x -Wall -Wextra -DDEBUG")
|
||||
# try_compile does not remove the temporary build directory, so put it in CMakeFiles...
|
||||
# Also: use absolute paths; cmake chokes on relative paths :-(
|
||||
try_compile(CXX_C0X_SUPPORTED "${CMAKE_HOME_DIRECTORY}/CMakeFiles/CMakeTmp/c0x-test" "${CMAKE_HOME_DIRECTORY}/empty.cpp" CMAKE_FLAGS "-std=c++0x")
|
||||
if(CXX_C0X_SUPPORTED)
|
||||
# Yes, I *know* c++0x is *not* an official C++ standard...
|
||||
message(STATUS "Compiler: C++ standard version 'c++0x' is supported")
|
||||
elseif(CXX_C0X_SUPPORTED)
|
||||
message(FATAL_ERROR "Compiler: C++ standard version c++0x is not supported")
|
||||
endif(CXX_C0X_SUPPORTED)
|
||||
try_compile(CXX_C11_SUPPORTED "${CMAKE_HOME_DIRECTORY}/CMakeFiles/CMakeTmp/c11-test" "${CMAKE_HOME_DIRECTORY}/empty.cpp" CMAKE_FLAGS "-std=c++11")
|
||||
if(CXX_C11_SUPPORTED)
|
||||
message(STATUS "Compiler: C++ standard version 'c++11' is supported")
|
||||
else(CXX_C11_SUPPORTED)
|
||||
message(STATUS "Compiler: C++ standard version 'c++11' is not supported")
|
||||
endif(CXX_C11_SUPPORTED)
|
||||
|
||||
# Determine C++ standard to use
|
||||
# If CXX_CXX_STANDARD is empty, use autodetected c++ standard version
|
||||
set(CXX_CXX_STANDARD "" CACHE STRING "C++ standard version to use. Leave empty, or set to c++11 or c++0x")
|
||||
string(COMPARE NOTEQUAL "${CXX_CXX_STANDARD}" "" CXX_CXX_STANDARD_OVERRIDE)
|
||||
if(CXX_CXX_STANDARD_OVERRIDE)
|
||||
string(COMPARE EQUAL "${CXX_CXX_STANDARD}" "c++11" CXX_C11_REQUESTED)
|
||||
string(COMPARE EQUAL "${CXX_CXX_STANDARD}" "c++0x" CXX_C0X_REQUESTED)
|
||||
if(CXX_C11_REQUESTED AND CXX_C11_SUPPORTED)
|
||||
message(STATUS "Compiler: C++ standard version 'c++11' selected (as requested)")
|
||||
set(CXX_USE_CXX_STANDARD "c++11")
|
||||
elseif(CXX_C11_REQUESTED AND NOT CXX_C11_SUPPORTED)
|
||||
message(FATAL_ERROR "Compiler: requested standard version '${CXX_CXX_STANDARD}' is not supported")
|
||||
elseif(CXX_C0X_REQUESTED)
|
||||
message(STATUS "Compiler: C++ standard version 'c++0x' selected (as requested)")
|
||||
set(CXX_USE_CXX_STANDARD "c++0x")
|
||||
else(CXX_C11_REQUESTED AND CXX_C11_SUPPORTED)
|
||||
message(FATAL_ERROR "Unrecognised c++ standard version requested: ${CXX_CXX_STANDARD}")
|
||||
endif(CXX_C11_REQUESTED AND CXX_C11_SUPPORTED)
|
||||
else(CXX_CXX_STANDARD_OVERRIDE)
|
||||
if(CXX_C11_SUPPORTED)
|
||||
message(STATUS "Compiler: C++ standard version 'c++11' selected")
|
||||
set(CXX_USE_CXX_STANDARD "c++11")
|
||||
else(CXX_C11_SUPPORTED)
|
||||
message(STATUS "Compiler: C++ standard version 'c++0x' selected (c++11 not supported)")
|
||||
set(CXX_USE_CXX_STANDARD "c++0x")
|
||||
endif(CXX_C11_SUPPORTED)
|
||||
endif(CXX_CXX_STANDARD_OVERRIDE)
|
||||
|
||||
# Clean targets after change in c++ standard, and remember current standard
|
||||
string(COMPARE EQUAL "${CXX_CXX_STANDARD_LAST}" "" FIRST_CXX_STANDARD)
|
||||
string(COMPARE NOTEQUAL "${CXX_CXX_STANDARD_LAST}" "${CXX_USE_CXX_STANDARD}" DIFFERENT_CXX_STANDARD)
|
||||
set(CXX_CXX_STANDARD_LAST_TEMP "${CXX_CXX_STANDARD_LAST}")
|
||||
set(CXX_CXX_STANDARD_LAST "${CXX_USE_CXX_STANDARD}" CACHE INTERNAL "Internal use - do not modify")
|
||||
if(DIFFERENT_CXX_STANDARD AND NOT FIRST_CXX_STANDARD)
|
||||
execute_process(COMMAND "${CMAKE_BUILD_TOOL}" clean RESULT_VARIABLE CLEANING_RESULT OUTPUT_QUIET ERROR_QUIET)
|
||||
if(CLEANING_RESULT)
|
||||
message(STATUS "Clean previous build because of standard change (was: '${CXX_CXX_STANDARD_LAST_TEMP}') (exit: ${CLEANING_RESULT})")
|
||||
else(CLEANING_RESULT)
|
||||
message(STATUS "Clean previous build because of standard change (was: '${CXX_CXX_STANDARD_LAST_TEMP}')")
|
||||
endif(CLEANING_RESULT)
|
||||
endif(DIFFERENT_CXX_STANDARD AND NOT FIRST_CXX_STANDARD)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-std=${CXX_USE_CXX_STANDARD} -Wall -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -std=${CXX_USE_CXX_STANDARD} -Wall -Wextra -DDEBUG")
|
||||
|
||||
|
||||
# Find libgd
|
||||
find_library(LIBGD_LIBRARY gd)
|
||||
|
Loading…
x
Reference in New Issue
Block a user