首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使GCC的GNU扩展独立于标准?

如何使GCC的GNU扩展独立于标准?
EN

Stack Overflow用户
提问于 2013-09-13 13:34:10
回答 2查看 1.6K关注 0票数 1

我想在基于cmake的构建系统中添加一个C++98 / C++11交换机。由于某些与跨平台相关的原因,它已经有了另一个交换机,即:

代码语言:javascript
复制
if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
endif()

因此,要添加C++11,我必须添加一个类似的子句,而且由于代码重复,我不喜欢它。是否真的不可能独立于标准启用扩展?类似于:

代码语言:javascript
复制
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${STANDARD_FLAG} ${EXTENSION_FLAGS}")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-13 13:37:25

你可以这样做:

代码语言:javascript
复制
if(USE_CXX_11)
  set(CXX_VERSION 11)
else()
  set(CXX_VERSION 98)
endif()

if(USE_GNU_EXTENSIONS)
  set(CXX_DIALECT gnu)
else()
  set(CXX_DIALECT c)
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${CXX_DIALECT}++${CXX_VERSION}")
票数 4
EN

Stack Overflow用户

发布于 2013-09-13 13:40:18

为什么不简单地使用CheckCXXCompilerFlag模块

可用作

代码语言:javascript
复制
include(CheckCXXCompilerFlag)

check_cxx_compiler_flag(-std=gnu++11  HAS_FLAG_STD_GNUCXX11)

if(NOT HAS_FLAG_STD_GNUCXX11)
    check_cxx_compiler_flag(-std=c++11    HAS_FLAG_STD_CXX11)
endif()

if(HAS_FLAG_STD_GNUCXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
endif()

if(HAS_FLAG_STD_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18787689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档