From 9c863039b620ebc54b218e8be5c4112906178323 Mon Sep 17 00:00:00 2001 From: Kornel Benko Date: Tue, 5 May 2020 13:49:50 +0200 Subject: [PATCH] Cmake build: Adapt handling of c++ standards to new Visual C++ 2019 More or less suggested by Thibaut Cuvelier's switch to Visual C++ 2019 --- CMakeLists.txt | 7 ++++++- development/cmake/modules/FindCXX11Compiler.cmake | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a123e7c34..618f62ac32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -657,7 +657,12 @@ else() set(library_type STATIC) endif() -if(NOT MSVC) +if(MSVC) + if (CXX11_FLAG MATCHES "\\+\\+([0-9]+)") + set(CMAKE_CXX_STANDARD ${CMAKE_MATCH_1}) + message(STATUS "CMAKE_CXX_STANDARD set to ${CMAKE_CXX_STANDARD}") + endif() +else() if(NOT LYX_QUIET) set(CMAKE_VERBOSE_MAKEFILE ON) endif() diff --git a/development/cmake/modules/FindCXX11Compiler.cmake b/development/cmake/modules/FindCXX11Compiler.cmake index 739d267bf0..e1bf1fbdc5 100644 --- a/development/cmake/modules/FindCXX11Compiler.cmake +++ b/development/cmake/modules/FindCXX11Compiler.cmake @@ -44,7 +44,15 @@ else() # MSVC does not have a general C++11 flag, one can only switch off # MS extensions with /Za in general or by extension with /Zc. # Use an empty flag to ensure that CXX11_STD_REGEX is correctly set. - set(CXX11_FLAG_CANDIDATES "noflagneeded") + if (MSVC_VERSION LESS 1926) + set(CXX11_FLAG_CANDIDATES "noflagneeded") + else() + set(CXX11_FLAG_CANDIDATES + "/std:c++20" + "/std:c++17" + "/std:c++14" + "noflagneeded") + endif() else() set(CXX11_FLAG_CANDIDATES "--std=c++14" @@ -113,7 +121,9 @@ set(SAFE_CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET}) set(CMAKE_REQUIRED_QUIET ON) SET(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") FOREACH(FLAG ${CXX11_FLAG_CANDIDATES}) - IF(NOT "${FLAG}" STREQUAL "noflagneeded") + IF("${FLAG}" STREQUAL "noflagneeded") + UNSET(CMAKE_REQUIRED_FLAGS) + ELSE() SET(CMAKE_REQUIRED_FLAGS "${FLAG}") ENDIF() UNSET(CXX11_FLAG_DETECTED CACHE) -- 2.39.2