CheckPrototypeDefinition

檢查一個 C 函數是否具有預期的原型。

check_prototype_definition
check_prototype_definition(<function> <prototype> <return> <headers> <variable>)
<function>

正在檢查其原型的函數名稱。

<prototype>

函數的預期原型,以字串形式提供。

<return>

函數的回傳值。這將在產生的測試程式的函數定義主體中用作回傳值,以驗證函數的回傳類型是否與預期類型相符。

<headers>

檢查函數原型所需的標頭檔名稱的分號分隔列表

<variable>

用於儲存檢查結果的變數名稱。此變數將建立為內部快取變數。

此命令產生一個測試程式並驗證它在沒有錯誤的情況下建置。產生的測試程式包含指定的 <headers>,定義一個具有給定文字 <prototype><return> 值的函數,然後使用指定的 <function>。簡化的測試程式可以說明為

#include <headers>
// ...
<prototype> { return <return>; }
int main(...) { ...<function>()... }

可以在呼叫此函數之前設定以下變數,以修改檢查的執行方式

CMAKE_REQUIRED_FLAGS

要傳遞給編譯器的其他旗標字串。字串必須以空格分隔——;-list 將不起作用。CMAKE_<LANG>_FLAGS 及其相關的特定於組態的變數的內容會自動新增到編譯器命令中,然後才是 CMAKE_REQUIRED_FLAGS 的內容。

CMAKE_REQUIRED_DEFINITIONS

形式為 -DFOO-DFOO=bar 的編譯器定義的 ;-list。 也會自動新增 <resultVar> 指定的名稱的定義。

CMAKE_REQUIRED_INCLUDES

要傳遞給編譯器的標頭搜尋路徑的 ;-list。 這些將是唯一使用的標頭搜尋路徑——INCLUDE_DIRECTORIES 目錄屬性的內容將被忽略。

CMAKE_REQUIRED_LINK_OPTIONS

在版本 3.14 中新增。

要新增至連結命令的選項的 ;-list (請參閱 try_compile() 以取得更多詳細資訊)。

CMAKE_REQUIRED_LIBRARIES

要新增至連結命令的程式庫的 ;-list。 這些可以是系統程式庫的名稱,也可以是 匯入目標 (請參閱 try_compile() 以取得更多詳細資訊)。

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中新增。

要傳遞給連結器的程式庫搜尋路徑的 ;-list (請參閱 try_compile() 以取得更多詳細資訊)。

CMAKE_REQUIRED_QUIET

在版本 3.1 中新增。

如果此變數評估為布林值 true,則會抑制與檢查關聯的所有狀態訊息。

範例

檢查 Solaris/illumos 系統上的 getpwent_r() 函數是否具有預期的原型

include(CheckPrototypeDefinition)

check_prototype_definition(
  getpwent_r
  "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
  "NULL"
  "unistd.h;pwd.h"
  HAVE_SOLARIS_GETPWENT_R
)