如何添加必需的最低编译器版本?

时间:2013-02-18 09:36:17

标签: cmake

我想在C ++ 11中创建一个项目,我使用CMake作为我的构建系统。

如何在CMake配置文件中添加必需的最低编译器版本?

3 个答案:

答案 0 :(得分:40)

AFAIK,对此类内容没有内置支持,但您当然可以自己编写:

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "your.required.gcc.version")
    message(FATAL_ERROR "Insufficient gcc version")
  endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "your.required.msvc.version")
    message(FATAL_ERROR "Insufficient msvc version")
  endif()
elseif(...)
# etc.
endif()

但是,我建议你实际上考虑使用特征检测方法。也就是说,使用try_compile()来验证编译器是否支持您需要的功能,如果不支持,则使用FATAL_ERROR。它在CMake中更具惯用性,并且具有额外的好处,您无需为所有编译器发现适当的最小版本。

答案 1 :(得分:22)

从CMake 2.8.10开始,用户可以访问CMAKE_< LANG> _COMPILER_VERSION变量以获取编译器版本。在以前的版本中,这些仅用于内部目的,不应由用户代码读取。它们也不能保证适用于所有语言,但C和CXX肯定可用。

CMake还包含可用于编写版本验证代码的版本比较运算符(VERSION_LESS,VERSION_EQUAL,VERSION_GREATER)。

请记住,您需要先找出您拥有的编译器,然后检查版本是否正确。

以下是我的一个项目的简短示例:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
    # require at least gcc 4.8
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
        message(FATAL_ERROR "GCC version must be at least 4.8!")
    endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    # require at least clang 3.2
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.2)
        message(FATAL_ERROR "Clang version must be at least 3.2!")
    endif()
else()
    message(WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC.")
endif()

答案 2 :(得分:4)

您可以按如下方式检查特定的gcc版本:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
    message(FATAL_ERROR "Require at least gcc-5.1")
endif()