相关疑难解决方法(0)

如何使用CMake检测编译器的C++ 11支持

如果编译器支持C++ 11,有没有办法让CMake自动检测?

因为在CMake运行期间通知用户会因为编译器不支持C++ 11而无法编译代码会很好.目前我设置了C++ 11标志.但是,如果编译器不支持它,则用户在CMake运行期间会收到编译错误而不是错误.

完美将是有效的东西find_package().但是,我没有找到任何提供所需功能的模块或功能.

另外,使用该功能检测编译器是否需要标志std=c++0x或更好std=c++11.

是否有可用的东西,或者我需要自己开发这个?

下面是我目前使用的一些代码,但它只适用于GNU'c GCC编译器.如果能有更通用的解决方案,那就太好了.

if(CMAKE_COMPILER_IS_GNUCXX)
   execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
   if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)
        message(STATUS "C++11 activated.")
        add_definitions("-std=gnu++11")
   elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3)
        message(WARNING "C++0x activated. If you get any errors update to a compiler which fully supports C++11")
        add_definitions("-std=gnu++0x")
   else ()
        message(FATAL_ERROR "C++11 needed. Therefore a gcc compiler with a version higher than 4.3 is needed.")   
   endif()
else(CMAKE_COMPILER_IS_GNUCXX)
   add_definitions("-std=c++0x") 
endif(CMAKE_COMPILER_IS_GNUCXX)
Run Code Online (Sandbox Code Playgroud)

c++ cmake c++11

71
推荐指数
6
解决办法
4万
查看次数

可以将不同的GCC方言联系在一起吗?

我知道原则上这可能是未定义的行为,但为了处理大型项目,这里是关于GCC的问题:

假设我使用完全相同的编译器安装编译一个转换单元gcc -std=c++98,另一个-std=c++11使用.是否有任何保证可以链接两个目标文件并获得定义良好的程序?

据我所知,由于不同的宏,潜在的问题只能来自库头的不同视图,而这些问题反过来最多只能新的成员函数添加到标准库类中,而不是成员对象.

这会以某种方式使用不同的语言方言选项编译更大项目的不同部分是否可以接受?

更新:我应该添加一个正交的问题:如何使用两个不同版本的GCC(比如4.3和4.6),但是同一个方言选项(-std=c++98)?此GCC文档中的列表似乎表明该库在4.2.2和4.6之间兼容.

c++ linker gcc undefined-behavior dialect

18
推荐指数
1
解决办法
687
查看次数

标签 统计

c++ ×2

c++11 ×1

cmake ×1

dialect ×1

gcc ×1

linker ×1

undefined-behavior ×1