我如何添加一个最小的编译器版本必需?(How can I add a minimum compile

2019-07-20 01:57发布

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

我如何能在CMake的配置文件添加一个最小的编译器版本必需?

Answer 1:

据我所知,没有内置支持这样的事情,但你当然可以把它写自己:

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的更地道,并有你没有发现合适的最低版本为所有的编译器在那里的好处。



Answer 2:

通过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()


Answer 3:

您可以检查特定的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()


文章来源: How can I add a minimum compiler version requisite?
标签: cmake