2009-03-15 12 views
12

Şu anda küçük bir C projesini autotools'dan CMake'a dönüştürüyorum. Eski configure.in yılındaCMay'daki başlık dosyalarını ve kitaplık işlevlerini nasıl kontrol edersiniz Autotools'ta yapılır?

ben aşağıdaki satırları kullanarak varlığının her başlık ve kütüphane işlevini kontrol:

# 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 

Birçok Autotools projeler afaik böyle yapar.

Derleyicinin gerekli üstbilgi dosyalarını denetlediğine ve bağlayıcının kitaplık işlevlerini denetlediğine rağmen, kodum hala #ifdef HAVE_FOOBAR ve benzeri için derleme işaretlerini doğru şekilde ayarlamak için yapılandırma aşamasında yapılan bu denetimlere gereksinim duyar.

Bu durumda, CMake ile üstbilgileri/işlevleri denetlemenin en iyi yolu nedir?

cevap

10

Kolayca liman doğrudan CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE vb ile Ayrıca bazı tavsiyeler için CMake_HowToDoPlatformChecks görebilirsiniz. Bu tarzda Yapılandırılması


(yani ucontext.h ve setjmp.h kontrol ve bir hediye kullanın #ifdef HAVE_UCONTEXT veya #ifdef HAVE_SETJMP kodunuzu değiştirerek yapabilirsiniz) taşınabilirliği ekler. Ayrıca, uygulamanızı dağıtırken, derleme hatasından (kullanıcılar için) ve bu nedenle iyi bir derleme sisteminden kaçınmak isterseniz, uygulamanızı dağıtmadan önce mimari farklılıkların çoğunu halledebilirsiniz.

Programlayıcı olmayanlar için, "gtk + üstbilgisini denetle - başarısız oldu" ifadesinin, aynı şeyi söyleyen derleme hatası satırlarının bir demetine sahip olmak yerine gtk yüklemeleri gerekir, ancak çoğu için okunamaz olduğunu anlamak daha kolaydır. bunların hepsi :)

İlgili konular