我想在基于cmake的构建系统中添加一个C++98 / C++11交换机。由于某些与跨平台相关的原因,它已经有了另一个交换机,即:
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,我必须添加一个类似的子句,而且由于代码重复,我不喜欢它。是否真的不可能独立于标准启用扩展?类似于:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${STANDARD_FLAG} ${EXTENSION_FLAGS}")发布于 2013-09-13 13:37:25
你可以这样做:
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}")发布于 2013-09-13 13:40:18
为什么不简单地使用CheckCXXCompilerFlag模块
可用作
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()https://stackoverflow.com/questions/18787689
复制相似问题