2009-03-15 18 views
12

Obecnie konwertuję mały projekt C z autotools na CMake.Jak sprawdzić pliki nagłówkowe i funkcje biblioteczne w CMake tak jak w Autotools?

W starym configure.in Sprawdziłem każdą funkcję nagłówka i biblioteki dla istnienia stosując następujące linie:

# 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 

To, co wielu projektów Autotools zrobić AFAIK.

Pomimo faktu, że kompilator już sprawdza niezbędne pliki nagłówkowe, a linker sprawdza funkcje biblioteki, mój kod nadal wymaga tych sprawdzeń wykonanych na etapie konfiguracji, aby poprawnie skonfigurować flagi kompilacji dla #ifdef HAVE_FOOBAR i podobne.

W takim przypadku jaka jest najlepsza praktyka sprawdzania nagłówków/funkcji za pomocą CMake?

Odpowiedz

10

Możesz z łatwością przesłać port bezpośrednio z CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE itp. Zobacz także CMake_HowToDoPlatformChecks, aby uzyskać porady.


Konfiguracja w tym stylu dodaje przenoszenia (czyli można sprawdzić ucontext.h i setjmp.h i korzystać z jednego prezentu, modyfikowania kodu z #ifdef HAVE_UCONTEXT lub #ifdef HAVE_SETJMP).

Co więcej, podczas rozprowadzania aplikacji, chcesz uniknąć błędów kompilacji (dla użytkowników), a tym samym z dobrym systemem kompilacji, możesz poradzić sobie z większością różnic w architekturze przed dystrybucją aplikacji.

Łatwiej jest programistom zrozumieć, że jeśli "sprawdź dla gtk + nagłówek - nie powiodło się", muszą zainstalować gtk, zamiast mieć wiele wierszy z błędami kompilacji, które mówią to samo, ale nieczytelne dla większości z nich :)

Powiązane problemy