mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-19 02:17:27 +08:00
MSVC: Record support for C11 and c_restrict
MSVC >=19.27 supports a C11 switch. The `c_restrict` feature has also been implemented. Fixes: #21069
This commit is contained in:
@@ -264,6 +264,10 @@ Other
|
|||||||
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
|
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
|
||||||
environment variable to customize colors.
|
environment variable to customize colors.
|
||||||
|
|
||||||
|
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
|
||||||
|
is now aware of the availability of C11 features in MSVC 19.27 and above,
|
||||||
|
including support for the ``c_restrict`` feature and the ``-std:c11`` flag.
|
||||||
|
|
||||||
Deprecated and Removed Features
|
Deprecated and Removed Features
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
@@ -347,3 +351,6 @@ Changes made since CMake 3.18.0 include the following.
|
|||||||
``OFF`` because this feature can break existing projects that have
|
``OFF`` because this feature can break existing projects that have
|
||||||
identically named header files in different include directories.
|
identically named header files in different include directories.
|
||||||
This restores compatibility with behavior of CMake 3.15 and below.
|
This restores compatibility with behavior of CMake 3.15 and below.
|
||||||
|
|
||||||
|
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
|
||||||
|
was updated for MSVC 19.27 as mentioned above.
|
||||||
|
@@ -2,7 +2,8 @@ set(_cmake_oldestSupported "_MSC_VER >= 1600")
|
|||||||
|
|
||||||
# Not yet supported:
|
# Not yet supported:
|
||||||
#set(_cmake_feature_test_c_static_assert "")
|
#set(_cmake_feature_test_c_static_assert "")
|
||||||
#set(_cmake_feature_test_c_restrict "")
|
|
||||||
|
set(_cmake_feature_test_c_restrict "_MSC_VER >= 1927")
|
||||||
|
|
||||||
set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
|
set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
|
||||||
set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
|
set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
|
||||||
|
@@ -1,15 +1,31 @@
|
|||||||
# MSVC has no specific options to set C language standards, but set them as
|
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
# empty strings anyways so the feature test infrastructure can at least check
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||||
# to see if they are defined.
|
|
||||||
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
|
|
||||||
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
|
|
||||||
set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
|
|
||||||
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
|
|
||||||
set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
|
|
||||||
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
|
|
||||||
|
|
||||||
# There is no meaningful default for this
|
include(Compiler/CMakeCommonCompilerMacros)
|
||||||
set(CMAKE_C_STANDARD_DEFAULT "")
|
|
||||||
|
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
|
||||||
|
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std:c11")
|
||||||
|
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std:c11")
|
||||||
|
|
||||||
|
__compiler_check_default_language_standard(C 19.27 99)
|
||||||
|
else()
|
||||||
|
# MSVC has no specific options to set C language standards, but set them as
|
||||||
|
# empty strings anyways so the feature test infrastructure can at least check
|
||||||
|
# to see if they are defined.
|
||||||
|
set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
|
||||||
|
set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
|
||||||
|
|
||||||
|
# There is no meaningful default for this
|
||||||
|
set(CMAKE_C_STANDARD_DEFAULT "")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
|
set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
|
||||||
|
|
||||||
@@ -31,6 +47,10 @@ macro(cmake_record_c_compile_features)
|
|||||||
list(APPEND CMAKE_C_COMPILE_FEATURES c_variadic_macros)
|
list(APPEND CMAKE_C_COMPILE_FEATURES c_variadic_macros)
|
||||||
list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
|
list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
|
||||||
endif()
|
endif()
|
||||||
|
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
|
||||||
|
list(APPEND CMAKE_C_COMPILE_FEATURES c_restrict)
|
||||||
|
list(APPEND CMAKE_C99_COMPILE_FEATURES c_restrict)
|
||||||
|
endif()
|
||||||
set(_result 0) # expected by cmake_determine_compile_features
|
set(_result 0) # expected by cmake_determine_compile_features
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user