CheckPrototypeDefinition

此模块提供一个命令来检查 C 函数是否具有预期的原型。

在 CMake 项目中加载此模块,使用

include(CheckPrototypeDefinition)

命令

此模块提供以下命令

check_prototype_definition

检查 C 函数是否具有预期的原型

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

传递给编译器的其他标志的空格分隔字符串。 分号分隔列表 不可用。 CMAKE_<LANG>_FLAGS 的内容及其相关的特定于配置的 CMAKE_<LANG>_FLAGS_<CONFIG> 变量会自动添加到编译器命令之前,位于此变量的内容之前。

CMAKE_REQUIRED_DEFINITIONS

每个编译器定义的 分号分隔列表,形式为 -DFOO-DFOO=bar。还将自动添加一个用于由检查命令的结果变量参数指定的名称的定义。

CMAKE_REQUIRED_INCLUDES

传递给编译器的头文件搜索路径的 分号分隔列表。这些将是唯一使用的头文件搜索路径;将忽略 INCLUDE_DIRECTORIES 目录属性的内容。

CMAKE_REQUIRED_LINK_OPTIONS

3.14 版新增。

添加到链接命令的选项的 分号分隔列表(有关更多详细信息,请参阅 try_compile())。

CMAKE_REQUIRED_LIBRARIES

添加到链接命令的库的 分号分隔列表。这些可以是系统库的名称,也可以是 导入的目标(有关更多详细信息,请参阅 try_compile())。

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中添加。

传递给链接器的库搜索路径的 分号分隔列表(有关更多详细信息,请参阅 try_compile())。

CMAKE_REQUIRED_QUIET

版本 3.1 中新增。

如果此变量评估为布尔真值,则与检查关联的所有状态消息都将被抑制。

示例

检查 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
)