Có thể kiểm tra số phiên bản nhỏ của GCC trong cmake không?Kiểm tra gcc nhỏ trong cmake
tôi muốn làm một cái gì đó như thế này:
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
Có thể kiểm tra số phiên bản nhỏ của GCC trong cmake không?Kiểm tra gcc nhỏ trong cmake
tôi muốn làm một cái gì đó như thế này:
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
Sử dụng if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
như đã đề cập bởi onqtam. Câu trả lời lỗi thời này đã trở lại từ 2.6 ngày CMake.
Bạn có thể chạy
gcc -dumpversion
và phân tích đầu ra. Đây là một cách để làm điều đó:
if (CMAKE_COMPILER_IS_GNUCC)
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION})
list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)
list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR)
message(STATUS ${GCC_MAJOR})
message(STATUS ${GCC_MINOR})
endif()
Điều đó sẽ in "4" và "3" cho phiên bản gcc 4.3.1. Tuy nhiên bạn có thể sử dụng phiên bản CMake của kiểm tra cú pháp để làm cho cuộc sống dễ dàng hơn một chút và bỏ qua những thứ regex:
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
if (GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3)
message(STATUS "Version >= 4.3")
endif()
Tôi thấy rằng thực sự hữu ích, cảm ơn. Có cách nào để tách dòng mới khỏi số phiên bản không? – Patryk
Kể từ gcc 7, '-dumpversion' bây giờ xuất hiện đơn giản là' 7', do đó, điều này bị hỏng. Ưu tiên câu trả lời bằng onqtam, điều này dễ di chuyển hơn nhiều. –
2.8.10 bây giờ là biến, nhưng bạn có thể muốn biết rằng gcc có -dumpfullversion – sherpya
Kể từ CMake 2.8.10 có các CMAKE_C_COMPILER_VERSION
và CMAKE_CXX_COMPILER_VERSION
biến chính xác cho mục đích này, do đó bạn có thể làm điều này:
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
Đây phải là câu trả lời được chấp nhận: ngắn hơn, đơn giản hơn, được xác định rõ cho tất cả các phiên bản trình biên dịch hiện tại và tương lai. Câu trả lời được chấp nhận ngay bây giờ (bởi richq) có một vấn đề: '-dumpversion' bây giờ trả về' 7' trong gcc 7, do đó, nó là một giải pháp bị hỏng. –
Kết hợp 2 câu trả lời khác, bạn có thể kiểm tra phiên bản gcc cụ thể như sau:
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
...
endif()
bản sao có thể có của [Làm cách nào tôi có thể thêm yêu cầu phiên bản trình biên dịch tối thiểu?] (Http://stackoverflow.com/questions/14933172/how-can-i-add-a-minimum-compiler-version-requisite) – sleske
Nếu tôi đoán ý định của bạn chính xác, điều này sẽ phát hiện sai GCC 5.0, 5.1, 6.0, 6.1, v.v. – jww