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