mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-05 13:50:10 -05:00
Features: Enable writing of MSVC compiler feature header.
Notes: VS2015 and above are the only MSVC versions to support cxx_final, so remove usages from the tests, and instead only test for cxx_override. VS2012 and above to conform to cxx_decltype_incomplete_return_types proposal, but without support for auto return types the dcl.type.simple example in the proposal doesn't compile. VS2013 and above to conform to the updated cxx_contextual_conversions proposal, but VS2010 and above pass the test. Compilers such as MSVC have no explicit flags to enable C++11 mode, it just is always on. So only run the link tests with compilers that require a flag to specify the language version.
This commit is contained in:
committed by
Brad King
parent
64c30bdc48
commit
f73718c9b8
@@ -11,7 +11,7 @@ get_property(c_known_features GLOBAL PROPERTY CMAKE_C_KNOWN_FEATURES)
|
||||
write_compiler_detection_header(
|
||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/test_compiler_detection.h"
|
||||
PREFIX TEST
|
||||
COMPILERS GNU Clang AppleClang
|
||||
COMPILERS GNU Clang AppleClang MSVC
|
||||
VERSION 3.1
|
||||
PROLOG "// something"
|
||||
EPILOG "// more"
|
||||
@@ -64,6 +64,18 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
|
||||
list(APPEND false_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
|
||||
endif()
|
||||
|
||||
# for msvc the compiler version determines which c++11 features are available.
|
||||
# Both variadic templates and delegating constructors support exist in
|
||||
# all versions that we write compile headers for.
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND
|
||||
";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ";cxx_delegating_constructors;")
|
||||
list(APPEND true_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
|
||||
list(APPEND true_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
|
||||
else(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
list(APPEND false_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
|
||||
list(APPEND false_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
|
||||
endif()
|
||||
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
|
||||
OR CMAKE_C_COMPILER_ID STREQUAL "Clang"
|
||||
OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
|
||||
@@ -81,7 +93,7 @@ write_compiler_detection_header(
|
||||
PREFIX MULTI
|
||||
OUTPUT_FILES_VAR multi_files
|
||||
OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/compiler_support"
|
||||
COMPILERS GNU Clang AppleClang
|
||||
COMPILERS GNU Clang AppleClang MSVC
|
||||
VERSION 3.1
|
||||
FEATURES
|
||||
${cxx_known_features} ${c_known_features}
|
||||
|
||||
Reference in New Issue
Block a user