此处是检测编译环境是否支持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 条评论) “” |