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. 瞭解編譯器的必備條件?
- 2. 有條件編譯.NET的最低版本
- 3. ActionScript 3:對編譯器或sdk版本進行條件編譯?
- 4. Eclipse-Groovy插件:添加新的Groovy編譯器版本
- 5. 降低編譯的依賴版本(VB.NET)
- 6. 我可以根據編譯器版本進行條件編譯嗎?
- 7. Eclipse Android - 必須清理每個版本編譯最新代碼
- 8. 插件的最低先決條件eclipse版本
- 9. 檢查Java編譯器版本(JDK版本)的編譯後的class文件
- 10. 如何將全局CXX編譯器標誌添加到yocto版本
- 11. 如何將編譯器添加到heroku?
- 12. SUNWspro編譯文件 - 檢測編譯器的版本號
- 13. 如何檢查qt .pro文件中的編譯器版本
- 14. 錯誤編譯Netty最新(主)版本
- 15. 添加編譯器階段
- 16. 如何在使用g ++編譯時添加mclmcrrt.lib或(.lib)文件編譯器
- 17. 如何獲得gradle編譯本地版本的畢加索
- 18. C#編譯版本
- 19. 編譯靜態庫時設置較早的最低內核版本
- 20. 如何準備預裝了所有必需的haskell軟件包和必需的編譯器的docker容器?
- 21. 如何在Ubuntu中跟上最新版本的Node.js? PPA?編譯?
- 22. 如何在WooCommerce版本中添加「必需」選項
- 23. 如何編譯PHP擴展跨版本?
- 24. 向Testflight添加「準備發售」版本
- 25. SYmfony插件上傳錯誤:您必須指定symfony的最低版本
- 26. RhinoMocks打破最新版本的Mono/MonoDevelop編譯器
- 27. xCode 6最終版本中的編譯器錯誤
- 28. 在編譯時檢查iOS10或更低版本
- 29. 針對較低版本的Xcode編譯iOS
- 30. 交叉編譯libstdC++/libgcc的較低版本的目標
雖然更地道,我發現,測試是否' std :: regex'用法編譯需要花費時間來編譯整個(小)項目。有時檢查版本對於開發人員來說更簡單,而且對於編譯項目的用戶來說更快。 – Ruslan 2016-06-29 14:16:55