2009-01-12 5 views
6

J'utilise certaines fonctionnalités fournies dans GCC v4 + et j'aimerais que CMake trouve le compilateur GCC v4 et s'il ne le trouve pas, renvoyer une erreur indiquant que GCC v4 est requis.De toute façon dans CMake pour exiger GCC version 4+?

Quelqu'un at-il des modules/idées sur la façon de faire quelque chose comme ça?

Merci.

Répondre

8

Utilisez la commande try_compile() et essayer de compiler le programme suivant

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

Une façon totalement différente (pas nécessairement mieux) pour mettre en œuvre une vérification de version gcc serait quelque chose comme:

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

Fonctionne simplement. Agréable. – Offirmo

0

Il y a aussi le fichier toolchain, qui is mentioned on the vtk wiki. Cela vous permet de spécifier des chaînes d'outils personnalisées. Il est généralement utilisé pour la compilation croisée, mais je l'ai déjà utilisé pour faire fonctionner d'autres chaînes d'outils.

4

Il y aura peut-être bientôt une solution dans cmake elle-même, cf. http://cmake.3232098.n2.nabble.com/GCC-compiler-version-td7185771.html

Les futures versions de CMake peuvent inclure deux variables: CMAKE_C_COMPILER_VERSION et CMAKE_CXX_COMPILER_VERSION. Halas, je ne les ai pas encore vu dans 2.8.8 changelog. J'utilise la solution @cmaker pour l'instant.

+0

Ces nouvelles variables devenaient vraiment utiles dans CMake 2.8.10+ car elles ajoutaient le support de compilateurs supplémentaires (tels que clang) et corrigeaient une faute de frappe C/CXX dans 2.8.9 http://www.kitware.com/blog/home/post/408 Les macros à rechercher sont CMakeDetermine * Compiler. – Ax3l

Questions connexes