diff --git a/cmake/modules/FindStdFilesystem.cmake b/cmake/modules/FindStdFilesystem.cmake index 83bb9862aee..6a6cd029da2 100644 --- a/cmake/modules/FindStdFilesystem.cmake +++ b/cmake/modules/FindStdFilesystem.cmake @@ -2,14 +2,26 @@ set(_std_filesystem_test_src ${CMAKE_CURRENT_LIST_DIR}/FindStdFilesystem_test.cc) macro(try_std_filesystem_library _library _result) + if(CMAKE_VERSION VERSION_LESS "3.8") + # abuse the definition flags, because they are quite + # the same as CMAKE_C_FLAGS: they are passed to the + # compiler. + set(_std_filesystem_try_compile_arg + COMPILE_DEFINITIONS "-std=c++17") + else() + set(_std_filesystem_try_compile_arg + CXX_STANDARD 17) + endif() try_compile(_std_filesystem_compiles ${CMAKE_CURRENT_BINARY_DIR} SOURCES ${_std_filesystem_test_src} - CMAKE_FLAGS -DCMAKE_CXX_FLAGS="-std=c++17" - LINK_LIBRARIES ${_library}) + LINK_LIBRARIES ${_library} + ${_std_filesystem_try_compile_arg}) + unset(_std_filesystem_try_compile_arg) if(_std_filesystem_compiles) set(${_result} ${_library}) endif() + unset(_std_filesystem_compiles) endmacro() @@ -23,6 +35,8 @@ if(NOT StdFilesystem_LIBRARY) try_std_filesystem_library("c++fs" StdFilesystem_LIBRARY) endif() +unset(_std_filesystem_test_src) + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(StdFilesystem FOUND_VAR StdFilesystem_FOUND