前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake:通过CMAKE_CXX_COMPILE_FEATURES判断编译器是否支持C++11

cmake:通过CMAKE_CXX_COMPILE_FEATURES判断编译器是否支持C++11

作者头像
10km
发布2022-04-13 12:36:06
4670
发布2022-04-13 12:36:06
举报
文章被收录于专栏:10km的专栏

以前在cmake中要判断一个编译器是否支持C++11挺麻烦的,要根据编译器的类型和版本来判断。 从cmake 3.1版本开始增加了一个CMAKE_CXX_COMPILE_FEATURES变量用于获取当前C++ 编译器支持的编译特性列表,列表中是一些定义在CMAKE_CXX_KNOWN_FEATURES(C++已知特性)中的特性名字,比如cxx_lambdas即为当前编译器支持lambda表达式。 从cmake 3.8版本开始,cmake可识别的编译特性增加了代表C++标准的特性名:cxx_std_98,cxx_std_11,cxx_std_14,cxx_std_17

最新的cmake 3.23版本还增加了cxx_std_20,cxx_std_23《High level meta features indicating C++ standard support》

有这个CMAKE_CXX_COMPILE_FEATURES变量,判断编译支持的标准就变得很简单可靠了:

代码语言:javascript
复制
cmake_minimum_required( VERSION 3.8 )
project(myprj VERSION 1.0.0 LANGUAGES C CXX)
# 输出CMAKE_CXX_COMPILE_FEATURES内容
#message("Your C++ compiler supports these C++ features:")
# foreach(i ${CMAKE_CXX_COMPILE_FEATURES})
#   message("${i}")
# endforeach()
# list命令在CMAKE_CXX_COMPILE_FEATURES 查找 cxx_std_11 ,
# 如果能找到就说明编译支持C++11
# 否则报错退出
list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_11 _cxx11_enable)
if(_cxx11_enable)
	message(STATUS "C++ 11 supported")
else()
	message(FATAL_ERROR "Compiler not supported C++ 11 standard")
endif()
unset(_cxx11_enable)

参考资料

《How to detect C++11 support of a compiler with CMake》 《CMAKE_CXX_COMPILE_FEATURES》 《CMAKE_CXX_KNOWN_FEATURES》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档