mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-17 15:32:10 +08:00
@@ -24,6 +24,9 @@ The features known to this version of CMake are:
|
||||
``c_std_11``
|
||||
Compiler mode is at least C 11.
|
||||
|
||||
``c_std_17``
|
||||
Compiler mode is at least C 17.
|
||||
|
||||
``c_function_prototypes``
|
||||
Function prototypes, as defined in ``ISO/IEC 9899:1990``.
|
||||
|
||||
|
@@ -11,7 +11,7 @@ flag such as ``-std=gnu11`` to the compile line. For compilers that
|
||||
have no notion of a C standard level, such as Microsoft Visual C++ before
|
||||
VS 16.7, this property has no effect.
|
||||
|
||||
Supported values are ``90``, ``99`` and ``11``.
|
||||
Supported values are ``90``, ``99``, ``11``, ``17``.
|
||||
|
||||
If the value requested does not result in a compile flag being added for
|
||||
the compiler in use, a previous standard flag will be added instead. This
|
||||
|
6
Help/release/dev/c-std.rst
Normal file
6
Help/release/dev/c-std.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
c-std
|
||||
-----
|
||||
|
||||
* :prop_tgt:`C_STANDARD` and the
|
||||
:manual:`Compile Features <cmake-compile-features(7)>` functionality gained
|
||||
support for C17.
|
@@ -9,6 +9,7 @@ set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
|
||||
set(CMAKE_C90_COMPILE_FEATURES "@CMAKE_C90_COMPILE_FEATURES@")
|
||||
set(CMAKE_C99_COMPILE_FEATURES "@CMAKE_C99_COMPILE_FEATURES@")
|
||||
set(CMAKE_C11_COMPILE_FEATURES "@CMAKE_C11_COMPILE_FEATURES@")
|
||||
set(CMAKE_C17_COMPILE_FEATURES "@CMAKE_C17_COMPILE_FEATURES@")
|
||||
|
||||
set(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@")
|
||||
set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@")
|
||||
|
@@ -39,6 +39,8 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||
# else
|
||||
# define C_DIALECT
|
||||
# endif
|
||||
#elif __STDC_VERSION__ >= 201710L
|
||||
# define C_DIALECT "17"
|
||||
#elif __STDC_VERSION__ >= 201000L
|
||||
# define C_DIALECT "11"
|
||||
#elif __STDC_VERSION__ >= 199901L
|
||||
|
@@ -10,6 +10,7 @@ function(cmake_determine_compile_features lang)
|
||||
set(CMAKE_C90_COMPILE_FEATURES)
|
||||
set(CMAKE_C99_COMPILE_FEATURES)
|
||||
set(CMAKE_C11_COMPILE_FEATURES)
|
||||
set(CMAKE_C17_COMPILE_FEATURES)
|
||||
|
||||
include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
|
||||
|
||||
@@ -20,6 +21,9 @@ function(cmake_determine_compile_features lang)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if (CMAKE_C11_COMPILE_FEATURES AND CMAKE_C17_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_C17_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES})
|
||||
endif()
|
||||
if (CMAKE_C99_COMPILE_FEATURES AND CMAKE_C11_COMPILE_FEATURES)
|
||||
list(REMOVE_ITEM CMAKE_C11_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES})
|
||||
endif()
|
||||
@@ -32,6 +36,7 @@ function(cmake_determine_compile_features lang)
|
||||
${CMAKE_C90_COMPILE_FEATURES}
|
||||
${CMAKE_C99_COMPILE_FEATURES}
|
||||
${CMAKE_C11_COMPILE_FEATURES}
|
||||
${CMAKE_C17_COMPILE_FEATURES}
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -39,6 +44,7 @@ function(cmake_determine_compile_features lang)
|
||||
set(CMAKE_C90_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_C99_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_C11_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
set(CMAKE_C17_COMPILE_FEATURES ${CMAKE_C17_COMPILE_FEATURES} PARENT_SCOPE)
|
||||
|
||||
message(CHECK_PASS "done")
|
||||
|
||||
|
@@ -64,6 +64,9 @@ endmacro()
|
||||
# Define to allow compile features to be automatically determined
|
||||
macro(cmake_record_c_compile_features)
|
||||
set(_result 0)
|
||||
if(_result EQUAL 0 AND DEFINED CMAKE_C17_STANDARD_COMPILE_OPTION)
|
||||
_has_compiler_features_c(17)
|
||||
endif()
|
||||
if(_result EQUAL 0 AND DEFINED CMAKE_C11_STANDARD_COMPILE_OPTION)
|
||||
if(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT)
|
||||
_has_compiler_features_c(11)
|
||||
|
@@ -308,8 +308,9 @@ struct StanardLevelComputer
|
||||
std::unordered_map<std::string, StanardLevelComputer> StandardComputerMapping =
|
||||
{
|
||||
{ "C",
|
||||
StanardLevelComputer{ "C", std::vector<int>{ 90, 99, 11 },
|
||||
std::vector<std::string>{ "90", "99", "11" } } },
|
||||
StanardLevelComputer{
|
||||
"C", std::vector<int>{ 90, 99, 11, 17 },
|
||||
std::vector<std::string>{ "90", "99", "11", "17" } } },
|
||||
{ "CXX",
|
||||
StanardLevelComputer{
|
||||
"CXX", std::vector<int>{ 98, 11, 14, 17, 20, 23 },
|
||||
|
@@ -739,6 +739,7 @@ private:
|
||||
F(c_std_90) \
|
||||
F(c_std_99) \
|
||||
F(c_std_11) \
|
||||
F(c_std_17) \
|
||||
FOR_EACH_C90_FEATURE(F) \
|
||||
FOR_EACH_C99_FEATURE(F) \
|
||||
FOR_EACH_C11_FEATURE(F)
|
||||
|
@@ -237,6 +237,7 @@ if (C_expected_features)
|
||||
if (std_flag_idx EQUAL -1)
|
||||
add_executable(default_dialect_C default_dialect.c)
|
||||
target_compile_definitions(default_dialect_C PRIVATE
|
||||
DEFAULT_C17=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},17>
|
||||
DEFAULT_C11=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},11>
|
||||
DEFAULT_C99=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},99>
|
||||
DEFAULT_C90=$<EQUAL:${CMAKE_C_STANDARD_DEFAULT},90>
|
||||
|
@@ -1,5 +1,9 @@
|
||||
|
||||
#if DEFAULT_C11
|
||||
#if DEFAULT_C17
|
||||
# if __STDC_VERSION__ < 201710L
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
#elif DEFAULT_C11
|
||||
# if __STDC_VERSION__ < 201112L
|
||||
# error Unexpected value for __STDC_VERSION__.
|
||||
# endif
|
||||
|
Reference in New Issue
Block a user