2009-03-15 6 views
12

Je suis en train de convertir un petit projet C de autotools en CMake.Comment vérifier les fichiers d'en-tête et les fonctions de bibliothèque dans CMake comme cela est fait dans Autotools?

Dans l'ancien configure.in j'ai vérifié toutes les fonctions d'en-tête et d'une bibliothèque pour l'existence en utilisant les lignes suivantes:

# Checks for header files 
AC_HEADER_STDC 
AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h]) 

# Checks for library functions 
AC_FUNC_FORK 
AC_CHECK_FUNCS([time localtime mktime gmtime exit fork chdir atol signal]) 
AC_FUNC_STRFTIME 

C'est ce que beaucoup de projets autotools font AFAIK. Malgré le fait que le compilateur vérifie déjà les fichiers d'en-tête nécessaires et que l'éditeur de liens vérifie les fonctions de bibliothèque, mon code a besoin de ces vérifications à l'étape configure pour configurer correctement ses indicateurs de compilation pour #ifdef HAVE_FOOBAR.

Dans ce cas, quelle est la meilleure pratique pour vérifier les en-têtes/fonctions avec CMake?

Répondre

10

Vous pouvez facilement porter cela directement avec CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE, etc. Voir aussi CMake_HowToDoPlatformChecks pour quelques conseils.


Configuration dans ce style ajoute la portabilité (vous pouvez vérifier ucontext.h et setjmp.h et utiliser celui présent, la modification de votre code avec #ifdef HAVE_UCONTEXT ou #ifdef HAVE_SETJMP). En outre, lorsque vous distribuez votre application, vous souhaitez éviter d'avoir des erreurs de compilation (pour les utilisateurs) et donc avec un bon système de construction, vous pouvez gérer la plupart des différences d'architecture avant de distribuer votre application.

Il est plus facile pour les non-programmeurs de comprendre que si "check for gtk + header - failed", ils doivent installer gtk plutôt que d'avoir un bloc de lignes d'erreur de compilation qui dit la même chose. d'entre eux :)

Questions connexes