19
A
回答
37
据我所知,没有内置这样的事情的支持,但你当然可以把它写自己:
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中更具惯用性,并且还有额外的好处,您不必为那里的所有编译器发现适当的最小版本。
21
从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()
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()
相关问题
- 1. z3最低Visual Studio编译器版本
- 2. 了解编译器的必备条件?
- 3. 有条件编译.NET的最低版本
- 4. 编译版本与最低要求版本Android
- 5. ActionScript 3:对编译器或sdk版本进行条件编译?
- 6. Android编程必备条件
- 7. Eclipse-Groovy插件:添加新的Groovy编译器版本
- 8. 降低编译的依赖版本(VB.NET)
- 9. 安装比设备最新版本更低的IOS版本
- 10. 如何安装最新版本的apple llvm编译器?
- 11. Eclipse Android - 必须清理每个版本编译最新代码
- 12. 我可以根据编译器版本进行条件编译吗?
- 13. 插件的最低先决条件eclipse版本
- 14. 检查Java编译器版本(JDK版本)的编译后的class文件
- 15. 如何将全局CXX编译器标志添加到yocto版本
- 16. Qt Creator - 如何添加编译器?
- 17. 如何将编译器添加到heroku?
- 18. SUNWspro编译文件 - 检测编译器的版本号
- 19. 如何检查qt .pro文件中的编译器版本
- 20. 错误编译Netty最新(主)版本
- 21. 添加C编译器MATLAB
- 22. 添加编译器阶段
- 23. 如何为小部件设置最低sdk版本
- 24. 如何在使用g ++编译时添加mclmcrrt.lib或(.lib)文件编译器
- 25. 什么编译器下载,如何下载编译器,以及如何将编译器添加到Qt? (Ubuntu 12.04)
- 26. 如何获得gradle编译本地版本的毕加索
- 27. require.js编译版本
- 28. C#编译版本
- 29. 编译版本3.2
- 30. 编译静态库时设置较早的最低内核版本
虽然更地道,我发现,测试是否' std :: regex'用法编译需要花费时间来编译整个(小)项目。有时检查版本对于开发人员来说更简单,而且对于编译项目的用户来说更快。 – Ruslan 2016-06-29 14:16:55