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)
可以查看具体的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)
| 归档时间: |
|
| 查看次数: |
15634 次 |
| 最近记录: |