[英]How to check header files and library functions in CMake like it is done in Autotools?
我目前正在將一個小型C項目從autotools轉換為CMake 。
在舊的configure.in
我使用以下行檢查每個頭和庫函數是否存在:
# 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
這就是許多autotools項目做AFAIK的事情。
盡管編譯器已經檢查了必要的頭文件並且鏈接器檢查了庫函數,但我的代碼仍然需要在配置階段完成這些檢查,以正確設置#ifdef HAVE_FOOBAR
等的編譯標志。
在這種情況下,使用CMake檢查標頭/功能的最佳做法是什么?
您可以使用CHECK_FUNCTION_EXISTS
, CHECK_INCLUDE_FILE
, CHECK_TYPE_SIZE
等直接輕松移植它。另請參閱CMake_HowToDoPlatformChecks以獲取一些建議。
以這種方式配置增加了可移植性(即你可以檢查ucontext.h
和setjmp.h
並使用當前的那個,用#ifdef HAVE_UCONTEXT
或#ifdef HAVE_SETJMP
修改你的代碼)。
此外,當您分發應用程序時,您希望避免編譯錯誤(對於用戶),因此使用良好的構建系統,您可以在分發應用程序之前處理大多數體系結構差異。
非程序員更容易理解,如果“檢查gtk +頭 - 失敗”,他們必須安裝gtk,而不是有一大堆編譯錯誤行說同樣的事情,但大多數人都無法讀取:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.