Comment vérifier les fichiers d'en-tête et les fonctions de bibliothèque dans CMake comme dans Autotools?

StackOverflow https://stackoverflow.com/questions/647892

  •  22-07-2019
  •  | 
  •  

Question

Je suis en train de convertir un petit projet C de autotools en CMake .

Dans l'ancien configure.in , j'ai vérifié l'existence de chaque fonction d'en-tête et de bibliothèque à l'aide des 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 de nombreux projets d’autotools font l’APAIK.

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 la bibliothèque, mon code a toujours besoin de ces vérifications au stade de la configuration pour configurer correctement ses indicateurs de compilation pour #ifdef HAVE_FOOBAR et similaires.

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

Était-ce utile?

La solution

Vous pouvez facilement le porter directement avec CHECK_FUNCTION_EXISTS , CHECK_INCLUDE_FILE , CHECK_TYPE_SIZE , etc. Voir également CMake_HowToDoPlatformChecks pour des conseils.

La configuration dans ce style ajoute la portabilité (vous pouvez par exemple vérifier ucontext.h et setjmp.h et utiliser celui qui est présent en modifiant votre code avec # ifdef HAVE_UCONTEXT ou #ifdef HAVE_SETJMP ).

De plus, lorsque vous distribuez votre application, vous souhaitez éviter les 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 "vérifier la présence de gtk + entête - échoué", ils doivent installer gtk, au lieu d’avoir un grand nombre de lignes d’erreur de compilation qui disent la même chose, mais non lisibles pour la plupart. d'entre eux:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top