mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-03 20:29:56 -06:00
Add a variable to indicate the latest standard known to be supported for
each language:
* `CMAKE_C_STANDARD_LATEST`
* `CMAKE_CXX_STANDARD_LATEST`
* `CMAKE_CUDA_STANDARD_LATEST`
* `CMAKE_HIP_STANDARD_LATEST`
* `CMAKE_OBJC_STANDARD_LATEST`
* `CMAKE_OBJCXX_STANDARD_LATEST`
These variables, more generally referred to as
`CMAKE_<LANG>_STANDARD_LATEST`, are assigned an integer value which
represents the minimum between the latest version of the associated
language standard supported by the current compiler and the latest
version supported by CMake.
Add documentation for these variables in a new page called
`CMAKE_<LANG>_STANDARD_LATEST` was added under the "Variables for
Languages" section of the `cmake-variables(7)` page.
Update each compiler-specific CMake script under
`${CMAKE_ROOT}\Modules\Compiler` to manually define the relevant
`CMAKE_<LANG>_STANDARD_LATEST` variable as necessary. This will
require updating and maintaining as newer compiler versions become
recognized by CMake.
Closes: #25717
50 lines
2.1 KiB
CMake
50 lines
2.1 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
include(Compiler/Fujitsu)
|
|
__compiler_fujitsu(CXX)
|
|
|
|
#set(CMAKE_PCH_EXTENSION .pch)
|
|
#set(CMAKE_PCH_EPILOGUE "#pragma hdrstop")
|
|
#set(CMAKE_CXX_COMPILE_OPTIONS_USE_PCH --no_pch_messages -include <PCH_HEADER> --use_pch <PCH_FILE>)
|
|
#set(CMAKE_CXX_COMPILE_OPTIONS_CREATE_PCH --no_pch_messages -include <PCH_HEADER> --create_pch <PCH_FILE>)
|
|
|
|
# The Fujitsu compiler offers both a 98 and 03 mode. These two are
|
|
# essentially interchangeable as 03 simply provides clarity to some 98
|
|
# ambiguyity.
|
|
#
|
|
# Re: Stroustrup's C++ FAQ:
|
|
# What is the difference between C++98 and C++03?
|
|
# From a programmer's view there is none. The C++03 revision of the
|
|
# standard was a bug fix release for implementers to ensure greater
|
|
# consistency and portability. In particular, tutorial and reference
|
|
# material describing C++98 and C++03 can be used interchangeably by all
|
|
# except compiler writers and standards gurus.
|
|
#
|
|
# Since CMake doesn't actually have an 03 mode and they're effectively
|
|
# interchangeable then we're just going to explicitly use 03 mode in the
|
|
# compiler when 98 is requested.
|
|
|
|
# The version matching is messy here. The std support seems to be related to
|
|
# the compiler tweak version derived from the patch id in the version string.
|
|
|
|
if(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 4)
|
|
set(CMAKE_CXX98_STANDARD_COMPILE_OPTION -std=c++03)
|
|
set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03)
|
|
set(CMAKE_CXX98_STANDARD__HAS_FULL_SUPPORT ON)
|
|
|
|
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION -std=c++11)
|
|
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -std=gnu++11)
|
|
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
|
|
|
|
set(CMAKE_CXX14_STANDARD_COMPILE_OPTION -std=c++14)
|
|
set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -std=gnu++14)
|
|
set(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT ON)
|
|
|
|
set(CMAKE_CXX17_STANDARD_COMPILE_OPTION -std=c++17)
|
|
set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION -std=gnu++17)
|
|
|
|
set(CMAKE_CXX_STANDARD_LATEST 17)
|
|
endif()
|
|
|
|
__compiler_check_default_language_standard(CXX 4 14)
|