¿Cómo verificar los archivos de encabezado y las funciones de la biblioteca en CMake como se hace en Autotools?

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

  •  22-07-2019
  •  | 
  •  

Pregunta

Actualmente estoy convirtiendo un pequeño proyecto de C de autotools a CMake .

En el antiguo configure.in , verifiqué la existencia de cada encabezado y función de biblioteca utilizando las siguientes líneas:

# 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

Es lo que muchos proyectos de autotools hacen AFAIK.

A pesar del hecho de que el compilador ya verifica los archivos de encabezado necesarios y el enlazador verifica las funciones de la biblioteca, mi código todavía necesita que se realicen estas verificaciones en la etapa de configuración para configurar correctamente sus indicadores de compilación para #ifdef HAVE_FOOBAR y similares.

En este caso, ¿cuál es la mejor práctica para verificar los encabezados / funciones con CMake?

¿Fue útil?

Solución

Puede portarlo directamente con CHECK_FUNCTION_EXISTS , CHECK_INCLUDE_FILE , CHECK_TYPE_SIZE , etc. Consulte también CMake_HowToDoPlatformChecks para obtener algunos consejos.


La configuración en este estilo agrega portabilidad (es decir, puede verificar ucontext.h y setjmp.h y usar el presente, modificando su código con # ifdef HAVE_UCONTEXT o #ifdef HAVE_SETJMP ).

Además, cuando distribuye su aplicación, desea evitar tener errores de compilación (para los usuarios) y, por lo tanto, con un buen sistema de compilación, puede manejar la mayoría de las diferencias de arquitectura antes de distribuir su aplicación.

Es más fácil para los no programadores entender que si " verifica el encabezado gtk + - falló " ;, tienen que instalar gtk, en lugar de tener un montón de líneas de error de compilación que dicen lo mismo, pero no son legibles para la mayoría de ellos :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top