2010-10-30 24 views
24

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) 
+0

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

+0

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

Trả lời

31

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() 

+0

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

+0

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. –

+0

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

17

Kể từ CMake 2.8.10 có các CMAKE_C_COMPILER_VERSIONCMAKE_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) 
+1

Đâ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. –

9

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() 
Các vấn đề liên quan