Use target_compile_features
to specify C++ standard requirement
This commit is contained in:
parent
fae6f7e081
commit
69ffedfe52
@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.1...3.18)
|
cmake_minimum_required(VERSION 3.8...3.18)
|
||||||
|
|
||||||
# Fallback for using newer policies on CMake <3.12.
|
# Fallback for using newer policies on CMake <3.12.
|
||||||
if(${CMAKE_VERSION} VERSION_LESS 3.12)
|
if(${CMAKE_VERSION} VERSION_LESS 3.12)
|
||||||
@ -122,17 +122,9 @@ endif ()
|
|||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/support/cmake")
|
"${CMAKE_CURRENT_SOURCE_DIR}/support/cmake")
|
||||||
|
|
||||||
include(cxx14)
|
include(CheckCXXCompilerFlag)
|
||||||
include(JoinPaths)
|
include(JoinPaths)
|
||||||
|
|
||||||
list(FIND CMAKE_CXX_COMPILE_FEATURES "cxx_variadic_templates" index)
|
|
||||||
if (${index} GREATER -1)
|
|
||||||
# Use cxx_variadic_templates instead of more appropriate cxx_std_11 for
|
|
||||||
# compatibility with older CMake versions.
|
|
||||||
set(FMT_REQUIRED_FEATURES cxx_variadic_templates)
|
|
||||||
endif ()
|
|
||||||
message(STATUS "Required features: ${FMT_REQUIRED_FEATURES}")
|
|
||||||
|
|
||||||
if (FMT_MASTER_PROJECT AND NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET)
|
if (FMT_MASTER_PROJECT AND NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET)
|
||||||
set_verbose(CMAKE_CXX_VISIBILITY_PRESET hidden CACHE STRING
|
set_verbose(CMAKE_CXX_VISIBILITY_PRESET hidden CACHE STRING
|
||||||
"Preset for the export of private symbols")
|
"Preset for the export of private symbols")
|
||||||
@ -239,7 +231,7 @@ if (FMT_MODULE)
|
|||||||
enable_module(fmt)
|
enable_module(fmt)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
target_compile_features(fmt INTERFACE ${FMT_REQUIRED_FEATURES})
|
target_compile_features(fmt PUBLIC cxx_std_11)
|
||||||
|
|
||||||
target_include_directories(fmt ${FMT_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC
|
target_include_directories(fmt ${FMT_SYSTEM_HEADERS_ATTRIBUTE} PUBLIC
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
||||||
@ -270,7 +262,7 @@ add_library(fmt-header-only INTERFACE)
|
|||||||
add_library(fmt::fmt-header-only ALIAS fmt-header-only)
|
add_library(fmt::fmt-header-only ALIAS fmt-header-only)
|
||||||
|
|
||||||
target_compile_definitions(fmt-header-only INTERFACE FMT_HEADER_ONLY=1)
|
target_compile_definitions(fmt-header-only INTERFACE FMT_HEADER_ONLY=1)
|
||||||
target_compile_features(fmt-header-only INTERFACE ${FMT_REQUIRED_FEATURES})
|
target_compile_features(fmt-header-only INTERFACE cxx_std_11)
|
||||||
|
|
||||||
target_include_directories(fmt-header-only ${FMT_SYSTEM_HEADERS_ATTRIBUTE} INTERFACE
|
target_include_directories(fmt-header-only ${FMT_SYSTEM_HEADERS_ATTRIBUTE} INTERFACE
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
# C++14 feature support detection
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
function (fmt_check_cxx_compiler_flag flag result)
|
|
||||||
if (NOT MSVC)
|
|
||||||
check_cxx_compiler_flag("${flag}" ${result})
|
|
||||||
endif ()
|
|
||||||
endfunction ()
|
|
||||||
|
|
||||||
if (NOT CMAKE_CXX_STANDARD)
|
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
|
||||||
endif()
|
|
||||||
message(STATUS "CXX_STANDARD: ${CMAKE_CXX_STANDARD}")
|
|
||||||
|
|
||||||
if (CMAKE_CXX_STANDARD EQUAL 20)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++20 has_std_20_flag)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++2a has_std_2a_flag)
|
|
||||||
|
|
||||||
if (has_std_20_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++20)
|
|
||||||
elseif (has_std_2a_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++2a)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
elseif (CMAKE_CXX_STANDARD EQUAL 17)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++17 has_std_17_flag)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++1z has_std_1z_flag)
|
|
||||||
|
|
||||||
if (has_std_17_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++17)
|
|
||||||
elseif (has_std_1z_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++1z)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
elseif (CMAKE_CXX_STANDARD EQUAL 14)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++14 has_std_14_flag)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++1y has_std_1y_flag)
|
|
||||||
|
|
||||||
if (has_std_14_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++14)
|
|
||||||
elseif (has_std_1y_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++1y)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
elseif (CMAKE_CXX_STANDARD EQUAL 11)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++11 has_std_11_flag)
|
|
||||||
fmt_check_cxx_compiler_flag(-std=c++0x has_std_0x_flag)
|
|
||||||
|
|
||||||
if (has_std_11_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++11)
|
|
||||||
elseif (has_std_0x_flag)
|
|
||||||
set(CXX_STANDARD_FLAG -std=c++0x)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
@ -109,7 +109,7 @@ if (FMT_MODULE)
|
|||||||
# If module support is present the module tests require a
|
# If module support is present the module tests require a
|
||||||
# test-only module to be built from {fmt}
|
# test-only module to be built from {fmt}
|
||||||
add_library(test-module OBJECT ${CMAKE_SOURCE_DIR}/src/fmt.cc)
|
add_library(test-module OBJECT ${CMAKE_SOURCE_DIR}/src/fmt.cc)
|
||||||
target_compile_features(test-module PUBLIC ${FMT_REQUIRED_FEATURES})
|
target_compile_features(test-module PUBLIC cxx_std_11)
|
||||||
target_include_directories(test-module PUBLIC
|
target_include_directories(test-module PUBLIC
|
||||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>)
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>)
|
||||||
enable_module(test-module)
|
enable_module(test-module)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.1...3.18)
|
cmake_minimum_required(VERSION 3.8...3.18)
|
||||||
|
|
||||||
project(fmt-test CXX)
|
project(fmt-test CXX)
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Test if compile errors are produced where necessary.
|
# Test if compile errors are produced where necessary.
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.1...3.18)
|
cmake_minimum_required(VERSION 3.8...3.18)
|
||||||
project(compile-error-test CXX)
|
project(compile-error-test CXX)
|
||||||
|
|
||||||
set(fmt_headers "
|
set(fmt_headers "
|
||||||
@ -64,7 +64,7 @@ function (run_tests)
|
|||||||
")
|
")
|
||||||
|
|
||||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test/CMakeLists.txt" "
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test/CMakeLists.txt" "
|
||||||
cmake_minimum_required(VERSION 3.1...3.18)
|
cmake_minimum_required(VERSION 3.8...3.18)
|
||||||
project(tests CXX)
|
project(tests CXX)
|
||||||
add_subdirectory(${FMT_DIR} fmt)
|
add_subdirectory(${FMT_DIR} fmt)
|
||||||
${cmake_targets}
|
${cmake_targets}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.1...3.18)
|
cmake_minimum_required(VERSION 3.8...3.18)
|
||||||
|
|
||||||
project(fmt-test)
|
project(fmt-test)
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ function(add_fuzzer source)
|
|||||||
if (FMT_FUZZ_LDFLAGS)
|
if (FMT_FUZZ_LDFLAGS)
|
||||||
target_link_libraries(${name} PRIVATE ${FMT_FUZZ_LDFLAGS})
|
target_link_libraries(${name} PRIVATE ${FMT_FUZZ_LDFLAGS})
|
||||||
endif ()
|
endif ()
|
||||||
target_compile_features(${name} PRIVATE cxx_generic_lambdas)
|
target_compile_features(${name} PRIVATE cxx_std_14)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
foreach (source chrono-duration.cc chrono-timepoint.cc float.cc named-arg.cc one-arg.cc two-args.cc)
|
foreach (source chrono-duration.cc chrono-timepoint.cc float.cc named-arg.cc one-arg.cc two-args.cc)
|
||||||
|
@ -9,6 +9,7 @@ add_library(gtest STATIC
|
|||||||
gmock-gtest-all.cc gmock/gmock.h gtest/gtest.h gtest/gtest-spi.h)
|
gmock-gtest-all.cc gmock/gmock.h gtest/gtest.h gtest/gtest-spi.h)
|
||||||
target_compile_definitions(gtest PUBLIC GTEST_HAS_STD_WSTRING=1)
|
target_compile_definitions(gtest PUBLIC GTEST_HAS_STD_WSTRING=1)
|
||||||
target_include_directories(gtest SYSTEM PUBLIC .)
|
target_include_directories(gtest SYSTEM PUBLIC .)
|
||||||
|
target_compile_features(gtest PUBLIC cxx_std_11)
|
||||||
|
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
if (Threads_FOUND)
|
if (Threads_FOUND)
|
||||||
@ -17,9 +18,10 @@ else ()
|
|||||||
target_compile_definitions(gtest PUBLIC GTEST_HAS_PTHREAD=0)
|
target_compile_definitions(gtest PUBLIC GTEST_HAS_PTHREAD=0)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Workaround GTest bug https://github.com/google/googletest/issues/705.
|
# Workaround GTest bug https://github.com/google/googletest/issues/705
|
||||||
fmt_check_cxx_compiler_flag(
|
if (NOT MSVC)
|
||||||
-fno-delete-null-pointer-checks HAVE_FNO_DELETE_NULL_POINTER_CHECKS)
|
check_cxx_compiler_flag(-fno-delete-null-pointer-checks HAVE_FNO_DELETE_NULL_POINTER_CHECKS)
|
||||||
|
endif ()
|
||||||
if (HAVE_FNO_DELETE_NULL_POINTER_CHECKS)
|
if (HAVE_FNO_DELETE_NULL_POINTER_CHECKS)
|
||||||
target_compile_options(gtest PUBLIC -fno-delete-null-pointer-checks)
|
target_compile_options(gtest PUBLIC -fno-delete-null-pointer-checks)
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.1...3.18)
|
cmake_minimum_required(VERSION 3.8...3.18)
|
||||||
|
|
||||||
project(fmt-link CXX)
|
project(fmt-link CXX)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user