簡體   English   中英

如何在CMake中檢查頭文件和庫函數,就像在Autotools中一樣?

[英]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_EXISTSCHECK_INCLUDE_FILECHECK_TYPE_SIZE等直接輕松移植它。另請參閱CMake_HowToDoPlatformChecks以獲取一些建議。


以這種方式配置增加了可移植性(即你可以檢查ucontext.hsetjmp.h並使用當前的那個,用#ifdef HAVE_UCONTEXT#ifdef HAVE_SETJMP修改你的代碼)。

此外,當您分發應用程序時,您希望避免編譯錯誤(對於用戶),因此使用良好的構建系統,您可以在分發應用程序之前處理大多數體系結構差異。

非程序員更容易理解,如果“檢查gtk +頭 - 失敗”,他們必須安裝gtk,而不是有一大堆編譯錯誤行說同樣的事情,但大多數人都無法讀取:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM