有没有办法让 CMake 自动检测编译器是否支持 C++11?
因为最好在 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)
原文由 tune2fs 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您有 CMake 3.1.0 或更高版本,您可以检测您的 C++ 编译器支持的 C++ 功能
但通常您不需要在 CMake 脚本中使用 CMake 变量 CMAKE_CXX_COMPILE_FEATURES 。相反,有两种方法可以告诉 CMake 您的 C++ 文件应该在哪个 C++ 标准下编译,通过明确指定 C++ 标准或通过指定所需的 C++ 功能并让 CMake 引入 C++ 标准。 CMake 将确保使用正确的命令行标志(例如 -std=c++11)调用 C++ 编译器。
您可以通过为您的 CMake 目标设置 CMake 属性 CXX_STANDARD 和 CXX_STANDARD_REQUIRED 来明确指定 C++ 标准。
您可以使用 CMake 命令 target_compile_features 指定在 CMake 目标中使用的 C++ 功能。从这个列表中,CMake 将引导使用 C++ 标准。 CMake 全局属性 CMAKE_CXX_KNOWN_FEATURES 列出了您可以选择的 C++ 功能。
例如,这个文件 名为 main.cc 的 C++ 程序利用了 C++11 的特性: cxx_strong_enums 、 cxx_constexpr 、 cxx_auto_type
这个 CMakeLists.txt 文件将构建它