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

Zhe*_*hen 22 cmake

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

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

Rei*_*ica 41

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()
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*ris 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()
Run Code Online (Sandbox Code Playgroud)


Ste*_*mer 9

可以查看具体的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()
Run Code Online (Sandbox Code Playgroud)