Bắt đầu với CMake 2.8.10 các biến CMAKE_ <LANG> _COMPILER_VERSION có thể được người dùng truy cập để lấy phiên bản trình biên dịch. Trong các phiên bản trước, chúng chỉ được dành riêng cho mục đích nội bộ và không được đọc bởi mã người dùng. Chúng cũng không đảm bảo được đặt cho tất cả ngôn ngữ nhưng C và CXX chắc chắn sẽ khả dụng.
CMake cũng chứa các toán tử để so sánh phiên bản (VERSION_LESS, VERSION_EQUAL, VERSION_GREATER) mà bạn có thể sử dụng để viết mã xác nhận phiên bản của mình.
Hãy nhớ rằng bạn sẽ cần phải tìm ra trình biên dịch nào bạn có trước và sau đó kiểm tra phiên bản chính xác.
Đây là một mẫu ngắn từ một trong những dự án của tôi:
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()
Trong khi nhiều thành ngữ, tôi đã phát hiện ra rằng thử nghiệm xem ' std :: regex' sử dụng biên dịch mất thời gian so sánh để biên soạn toàn bộ (nhỏ) dự án. Đôi khi việc kiểm tra phiên bản đơn giản hơn cho nhà phát triển và nhanh hơn cho người dùng biên soạn dự án. – Ruslan