vs2019通过cmakelists.txt检测支持C++17

此处是检测编译环境是否支持C++17学习记录,如有不当及错误之处,请指正,谢谢!

在写C++代码时,如何检测当前编译环境是否支持C++17编译。

由于我的项目是采用VS2019构建的,所以在cmakelists.txt中会针对MSVC编译情况进行判断。

本文不会解释cmakelists.txt语法规则,如有不清楚请自己查看cmake官网,谢谢。

请看下面的描述:

1 需在项目或文件中添加如下内容:

#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1)
#define PROJ_SUPPORT_CPP_17
#endif
#ifdef PROJ_SUPPORT_CPP_17
// C++17处理程序
#endif

2 需在camkelists.txt中添加如下内容:

# 检测编译器是否支持C++17
foreach(feature ${CMAKE_CXX_COMPILE_FEATURES})
  if (${feature} STREQUAL cxx_std_17)
    set(compiler_supports_cpp_17 TRUE)
  endif()
endforeach()

# 对于采用VS2019编译的情况,MSVC 2015 (14.0)是不支持C++17
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.1)
  unset(compiler_supports_cpp_17)
endif()

# 从文件检查PROJ_SUPPORT_CPP_17
if  ${compiler_supports_cpp_17}
  file(READ ${file} FILE_CONTENT)
  string(FIND "${FILE_CONTENT}" "PROJ_SUPPORT_CPP_17" CPP_SUPPORT_17_FOUND)
  if(NOT ${CPP_SUPPORT_17_FOUND} EQUAL -1)
    # 添加C++17
    target_compile_features(${target} PRIVATE cxx_std_17)
  endif()
endif()
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章