Proper handling of Release mode. CMake requires some cajoling to deal with the CMAKE_BUILD_TYPE and CXX_FLAGS. Change-Id: I239f01e61c4985e0dbdc078ff0f4f377eceb36b9
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fe4aba..83a5fe2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -412,30 +412,40 @@ ADD_SUBDIRECTORY(internal/ceres) ADD_SUBDIRECTORY(examples) -# The following flags break the old gcc that ships on Mac OS X, so we -# only do it for linux right now. -IF (${UNIX}) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=native -march=native") -ENDIF (${UNIX}) - # Change the default build type from Debug to Release, while still # supporting overriding the build type. - -IF (DEFINED CMAKE_BUILD_TYPE) +# +# The CACHE STRING logic here and elsewhere is needed to force CMake +# to pay attention to the value of these variables. +IF (NOT CMAKE_BUILD_TYPE) + MESSAGE("-- No build type specified; defaulting to CMAKE_BUILD_TYPE=Release.") + SET(CMAKE_BUILD_TYPE Release CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +ELSE (NOT CMAKE_BUILD_TYPE) IF (CMAKE_BUILD_TYPE STREQUAL "Debug") MESSAGE("\n=================================================================================") MESSAGE("\n-- Build type: Debug. Performance will be terrible!") MESSAGE("-- Add -DCMAKE_BUILD_TYPE=Release to the CMake command line to get an optimized build.") MESSAGE("\n=================================================================================") - ELSE (CMAKE_BUILD_TYPE STREQUAL "Debug") - IF (CMAKE_BUILD_TYPE STREQUAL "") - MESSAGE("-- No build type specified; defaulting to CMAKE_BUILD_TYPE=Release.") - SET(CMAKE_BUILD_TYPE Release) - ELSE (CMAKE_BUILD_TYPE STREQUAL "") - MESSAGE ("-- Build type: ${CMAKE_BUILD_TYPE}.") - ENDIF (CMAKE_BUILD_TYPE STREQUAL "") ENDIF (CMAKE_BUILD_TYPE STREQUAL "Debug") -ELSE (DEFINED CMAKE_BUILD_TYPE) - MESSAGE("-- No build type specified; defaulting to CMAKE_BUILD_TYPE=Release.") - SET(CMAKE_BUILD_TYPE Release) -ENDIF (DEFINED CMAKE_BUILD_TYPE) +ENDIF (NOT CMAKE_BUILD_TYPE) + +# Set the default Ceres flags to an empty string. +SET (CERES_CXX_FLAGS) + +IF (CMAKE_BUILD_TYPE STREQUAL "Release") + IF (CMAKE_COMPILER_IS_GNUCXX) + # Linux + IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -march=native -mtune=native") + ENDIF (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + + # Mac OS X + IF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -fast") + ENDIF (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + ENDIF (CMAKE_COMPILER_IS_GNUCXX) + SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CERES_CXX_FLAGS}" + CACHE STRING "Release mode flags to the C++ Compiler" FORCE) +ENDIF (CMAKE_BUILD_TYPE STREQUAL "Release")