2009-01-12 14 views
6

Używam niektórych funkcji, które są dostarczane w GCC v4 + i chciałbym, aby CMake znalazł kompilator GCC v4, a jeśli go nie znajdzie, zwróć błąd stwierdzający, że GCC v4 jest wymagany.Jakikolwiek sposób w CMake wymagać GCC w wersji 4+?

Ktoś ma jakieś moduły/pomysły, jak zrobić coś takiego?

Dzięki.

Odpowiedz

8

Użyj polecenia try_compile() i spróbuj skompilować następujący program

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

całkowicie inny (niekoniecznie lepszy) sposób zaimplementować gcc sprawdzanie wersji byłoby coś jak:

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

Po prostu działa. Miły. – Offirmo

0

Istnieje również plik toolchain, który is mentioned on the vtk wiki. Dzięki temu możesz określić niestandardowe rozszerzenia narzędzi. Zwykle jest używana do kompilacji krzyżowej, ale użyłem jej wcześniej, aby inne narzędzia działały.

4

Wkrótce może pojawić się rozwiązanie w samym cmake, cf. http://cmake.3232098.n2.nabble.com/GCC-compiler-version-td7185771.html

Przyszłe wersje CMake może obejmować dwie zmienne: CMAKE_C_COMPILER_VERSION i CMAKE_CXX_COMPILER_VERSION.

Halas, nie widziałem ich jeszcze w dzienniku zmian 2.8.8.

Na razie używam rozwiązania @cmaker.

+0

Nowe zmienne stały się bardzo przydatne w CMake 2.8.10+, ponieważ dodały obsługę dodatkowych kompilatorów (takich jak clang) i naprawiły literówkę C/CXX w wersji 2.8.9 http://www.kitware.com/blog/home/post/408 Makra, których należy szukać, to CMakeDetermine * Compiler. – Ax3l