[Bf-blender-cvs] [ebf7673f83a] master: CMake: Have CMake Control the C++ version.

Ray Molenkamp noreply at git.blender.org
Wed Jul 14 23:17:08 CEST 2021


Commit: ebf7673f83aea30dc126f0997c9c6f42f2cf5d9e
Author: Ray Molenkamp
Date:   Wed Jul 14 15:17:02 2021 -0600
Branches: master
https://developer.blender.org/rBebf7673f83aea30dc126f0997c9c6f42f2cf5d9e

CMake: Have CMake Control the C++ version.

We were manually setting the compiler flags
for C++17 support for this previously. CMake
can do this for us in a uniform way without
having to worry about compiler specifics.

Setting these flags manually somehow brought
out some unwanted behaviour (CMake switching
back to C++14) in the nightly CMake builds.

Unsure if that's a CMake bug or planned
new behaviour for future version, but best
to play it safe.

These flags are supported since CMake 3.1
so should not break anything.

Reviewed by: Campbell Barton

Differential Revision: https://developer.blender.org/D11891

===================================================================

M	CMakeLists.txt

===================================================================

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91ac63d5e50..c5992993f91 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1705,22 +1705,18 @@ if(WITH_PYTHON)
   endif()
 endif()
 
-if(MSVC)
-  string(APPEND CMAKE_CXX_FLAGS " /std:c++17")
-  # Make MSVC properly report the value of the __cplusplus preprocessor macro
-  # Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
-  # of the C++ standard chosen above
-  if(MSVC_VERSION GREATER 1913)
-    string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
-  endif()
-elseif(
-  CMAKE_COMPILER_IS_GNUCC OR
-  CMAKE_C_COMPILER_ID MATCHES "Clang" OR
-  CMAKE_C_COMPILER_ID MATCHES "Intel"
-)
-  string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
-else()
-  message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++17 build")
+# Select C++17 as the standard for C++ projects.
+set(CMAKE_CXX_STANDARD 17)
+# If C++17 is not available, downgrading to an earlier standard is NOT OK.
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+# Do not enable compiler specific language extentions.
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+# Make MSVC properly report the value of the __cplusplus preprocessor macro
+# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
+# of the C++ standard chosen above.
+if(MSVC AND MSVC_VERSION GREATER 1913)
+  string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
 endif()
 
 # Visual Studio has all standards it supports available by default



More information about the Bf-blender-cvs mailing list