2009-01-12 14 views
6

Tôi đang sử dụng một số tính năng được cung cấp trong GCC v4 + và muốn CMake tìm trình biên dịch GCC v4 và nếu nó không tìm thấy, hãy trả về lỗi nêu rõ GCC v4 là bắt buộc.Bất kỳ cách nào trong CMake yêu cầu phiên bản GCC 4+?

Bất kỳ ai cũng có bất kỳ mô-đun/ý tưởng nào về cách thực hiện một việc như thế này?

Cảm ơn.

Trả lời

8

Sử dụng try_compile() chỉ huy và cố gắng để biên dịch chương trình sau đây

#if __GNUC__ != 4 
#error 
#endif 
int main() { return 0; } 
7

Một cách hoàn toàn khác nhau (không nhất thiết phải tốt hơn) để thực hiện một phiên bản kiểm tra gcc sẽ là một cái gì đó như:

if(CMAKE_COMPILER_IS_GNUCXX) 
    exec_program(
     ${CMAKE_CXX_COMPILER} 
     ARGS     --version 
     OUTPUT_VARIABLE _compiler_output) 
    string(REGEX REPLACE ".* ([0-9]\\.[0-9]\\.[0-9]) .*" "\\1" 
     gcc_compiler_version ${_compiler_output}) 
    message(STATUS "C++ compiler version: ${gcc_compiler_version} [${CMAKE_CXX_COMPILER}]") 

    if(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]") 
    message(FATAL_ERROR "foobar") 
    ... 

    if(gcc_compiler_version VERSION_GREATER "4.5.99") 
    ... 
... 
+0

Chỉ hoạt động. Tốt đẹp. – Offirmo

0

Ngoài ra còn có tệp chuỗi công cụ, trong đó is mentioned on the vtk wiki. Điều đó cho phép bạn chỉ định các toolchains tùy chỉnh. Nó thường được sử dụng để biên dịch chéo, nhưng tôi đã sử dụng nó trước để có được các công cụ khác hoạt động.

4

Có thể sớm có một giải pháp bằng chính cmake, cf. http://cmake.3232098.n2.nabble.com/GCC-compiler-version-td7185771.html

phiên bản tương lai của cmake có thể bao gồm hai biến: CMAKE_C_COMPILER_VERSIONCMAKE_CXX_COMPILER_VERSION.

Hala, tôi chưa thấy chúng trong 2.8.8 changelog.

Tôi sử dụng giải pháp @cmaker ngay bây giờ.

+0

Những vars mới trở nên thực sự hữu ích trong CMake 2.8.10+ khi họ thêm hỗ trợ cho các trình biên dịch bổ sung (chẳng hạn như tiếng lóng) và sửa lỗi đánh máy C/CXX trong 2.8.9 http://www.kitware.com/blog/home/post/408 Các macro cần tìm là CMakeDetermine * Compiler. – Ax3l