2009-03-15 12 views
12

Attualmente sto convertendo un piccolo progetto C da autotools a CMake.Come controllare i file di intestazione e le funzioni di libreria in CMake come avviene in Autotools?

Nel vecchio configure.in ho controllato ogni intestazione e libreria di funzioni per l'esistenza utilizzando le seguenti linee:

# 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 

E 'quello che molti progetti autotools fanno per quanto ne so.

Nonostante il compilatore controlli già i file di intestazione necessari e il linker controlli le funzioni di libreria, il mio codice ha ancora bisogno di questi controlli fatti in fase di configurazione per configurare correttamente i flag di compilazione per #ifdef HAVE_FOOBAR e simili.

In questo caso, qual è la procedura migliore per verificare le intestazioni/funzioni con CMake?

risposta

10

È possibile effettuare il porting direttamente con CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE, ecc. Vedere anche CMake_HowToDoPlatformChecks per alcuni consigli.


Configurazione in questo stile aggiunge portabilità (cioè si può verificare la presenza di ucontext.h e setjmp.h e utilizzare quello presente, modificando il codice con #ifdef HAVE_UCONTEXT o #ifdef HAVE_SETJMP).

Inoltre, quando si distribuisce l'applicazione, si desidera evitare l'errore di compilazione (per gli utenti) e quindi con un buon sistema di compilazione, è possibile gestire la maggior parte delle differenze di architettura prima di distribuire l'app.

Per i non programmatori è più facile capire che se "verifica la presenza di gtk + header - failed", devono installare gtk, piuttosto che avere un buch di righe di errore compilate che dicono la stessa cosa, ma non sono leggibili per la maggior parte di loro :)

Problemi correlati