2009-01-12 11 views

Respuesta

8

Utilice el comando try_compile() y tratar de compilar el programa siguiente

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

de una manera totalmente diferente (no necesariamente mejor) para implementar una comprobación de versión gcc sería algo así como:

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

Solo funciona. Bonito. – Offirmo

0

También está el archivo toolchain, que is mentioned on the vtk wiki. Eso le permite especificar cadenas de herramientas personalizadas. Normalmente se usa para la compilación cruzada, pero lo he usado antes para que funcionen otras cadenas de herramientas.

4

Puede que pronto haya una solución en cmake, cf. http://cmake.3232098.n2.nabble.com/GCC-compiler-version-td7185771.html

versiones futuras de cmake pueden incluir dos variables: CMAKE_C_COMPILER_VERSION y CMAKE_CXX_COMPILER_VERSION.

Halas, todavía no los he visto en el registro de cambios 2.8.8.

Utilizo la solución @ maker por el momento.

+0

Estos nuevos vars se volvieron realmente útiles en CMake 2.8.10+ ya que agregaron compatibilidad con compiladores adicionales (como clang) y corrigieron un error tipográfico C/CXX en 2.8.9 http://www.kitware.com/blog/home/post/408 Las macros a buscar son compilador CMakeDetermine *. – Ax3l

Cuestiones relacionadas