@@ -2,6 +2,46 @@ set(CMAKE_VERSION_MINIMUM 3.31)
22cmake_minimum_required (VERSION ${CMAKE_VERSION_MINIMUM} )
33message (STATUS "Cmake version: ${CMAKE_VERSION} (>= ${CMAKE_VERSION_MINIMUM} ✓)" )
44
5+ # Compiler version check
6+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
7+ if (WIN32 )
8+ message (FATAL_ERROR
9+ "Detected the use of MinGW GCC compiler on Windows.\n "
10+ "MinGW GCC has serious compatibility issues with C++23 modules (import std).\n "
11+ "Please switch to Clang (such as llvm-mingw) or MSVC for compilation."
12+ )
13+ endif ()
14+ set (COMPILER_GCC_VERSION_MINIMUM 14.0)
15+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_GCC_VERSION_MINIMUM} )
16+ message (FATAL_ERROR
17+ "GCC version too old for C++ Modules.\n "
18+ "GCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} X)"
19+ )
20+ else ()
21+ message (STATUS "GCC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_GCC_VERSION_MINIMUM} ✓)" )
22+ endif ()
23+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
24+ set (COMPILER_CLANG_VERSION_MINIMUM 17.0)
25+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${COMPILER_CLANG_VERSION_MINIMUM} )
26+ message (FATAL_ERROR
27+ "Clang version too old for C++ Modules.\n "
28+ "Clang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} X)"
29+ )
30+ else ()
31+ message (STATUS "Clang version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_CLANG_VERSION_MINIMUM} ✓)" )
32+ endif ()
33+ elseif (MSVC )
34+ set (COMPILER_MSVC_VERSION_MINIMUM 1934)
35+ if (MSVC_VERSION LESS ${COMPILER_MSVC_VERSION_MINIMUM} )
36+ message (FATAL_ERROR
37+ "MSVC version too old for C++ Modules.\n "
38+ "MSVC version: ${CMAKE_CXX_COMPILER_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} X)"
39+ )
40+ else ()
41+ message (STATUS "MSVC version: ${MSVC_VERSION} (>= ${COMPILER_MSVC_VERSION_MINIMUM} ✓)" )
42+ endif ()
43+ endif ()
44+
545# https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst
646set (CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457" )
747set (CMAKE_CXX_STANDARD 23)
0 commit comments