ExtUtils::Constant - 生成 XS 代码以导入 C 头文件常量
use ExtUtils::Constant qw (WriteConstants);
WriteConstants(
NAME => 'Foo',
NAMES => [qw(FOO BAR BAZ)],
);
# Generates wrapper code to make the values of the constants FOO BAR BAZ
# available to perl
ExtUtils::Constant 帮助生成 C 和 XS 包装代码,以允许 Perl 模块自动加载在 C 库头文件中定义的常量。它主要由 h2xs
实用程序使用,该实用程序基于此代码。它不包含用于扫描头文件以提取这些常量的例程。
通常,只需要调用 WriteConstants
函数,然后
#include "const-c.inc"
在 Foo.xs
的 C 部分
INCLUDE: const-xs.inc
在 Foo.xs
的 XS 部分。
为了获得更大的灵活性,可以使用 `constant_types()`、`C_constant` 和 `XS_constant`,`WriteConstants` 是用它们实现的。
目前,该模块理解以下类型。h2xs 可能只知道其中的一部分。数值类型的尺寸由编译时的 `Configure` 脚本决定。
有符号整数,至少 32 位。
无符号整数,与 IV 大小相同。
浮点类型,可能是 `double`,也可能是 `long double`。
以 NUL 结尾的字符串,长度将使用 `strlen` 确定。
一个固定长度的东西,以 [指针,长度] 对的形式给出。如果你在编译时知道字符串的长度,你可以使用它来代替 PV。
一个 mortal SV。
真值。 (PL_sv_yes
) 不需要(也不使用)该值。
定义的假值。 (PL_sv_no
) 不需要(也不使用)该值。
undef
。不需要宏的值。
一个返回单个标量的函数,其中包含用于在生成的 C 和 XS 函数之间内部使用的常量的 `#define` 定义。
一个用于生成 XS 代码的函数,以实现由 PACKAGE::AUTOLOAD 用于加载常量的 perl 子例程 PACKAGE::constant。此 XS 代码是围绕通常由 `C_constant` 生成的 C 子例程的包装器,通常命名为 `constant`。
TYPES 应该以逗号分隔的类型列表的形式给出,这些类型是 C 子例程 `constant` 将生成的,或者以对哈希的引用形式给出。它应该与 `C_constant` 给出的类型列表相同。[否则,`XS_constant` 和 `C_constant` 可能对传递给 C 函数 `constant` 的参数数量有不同的想法]
如果你给出参数 XS_SUBNAME,你可以将 perl 可见子例程命名为除 `constant` 之外的其他名称。它调用的 C 子例程默认为 perl 可见子例程的名称,除非你给出参数 C_SUBNAME。
该函数用于为模块PACKAGE生成AUTOLOAD子例程,VERSION是代码应向后兼容的Perl版本。它默认为运行子例程的Perl版本。如果AUTOLOADER为真,则AUTOLOAD子例程将回退到AutoLoader::AUTOLOAD,用于constant()例程无法识别的所有名称。
WriteMakefileSnippet ATTRIBUTE => VALUE [, ...]
该函数用于生成Makefile.PL的Perl代码,该代码将重新生成常量子例程。参数以传递给WriteConstants
的方式命名,并添加了INDENT
以指定前导空格的数量(默认为2)。
目前仅识别INDENT
、NAME
、DEFAULT_TYPE
、NAMES
、C_FILE
和XS_FILE
。
编写一个C代码文件和一个XS代码文件,您应该在模块的XS代码的C部分和XS部分分别#include
和INCLUDE
它们。您可能希望在Makefile.PL
中执行此操作,以便您可以轻松地编辑常量列表,而无需触碰模块的其余部分。支持的属性如下
模块的名称。必须指定此项。
常量的默认类型。如果未指定,则假定为IV
。
常量的名称按长度分组。为每个组生成子例程,这些子例程包含此数量或更多名称。
一个常量名称数组,可以是包含名称的标量,也可以是如"C_constant"中所述的哈希引用。
如果为真,则使用代理子例程。请参阅ExtUtils::Constant::ProxySubs。
用于写入C代码的文件句柄。如果未给出,则打开C_FILE以进行写入。
包含C代码的要写入的文件的名称。默认值为const-c.inc
。名称中的-
确保该文件不会被误认为与合法Perl包名称相关的任何内容,并且不将文件命名为.c
可以避免必须覆盖Makefile.PL的.xs
到.c
规则。
用于写入 XS 代码的文件句柄。如果未给出,则将打开 XS_FILE 以供写入。
包含 XS 代码的要写入的文件的名称。默认值为 const-xs.inc
。
生成的 XS 子例程的 Perl 可见名称,它将返回常量。默认值为 constant
。
生成的 C 子例程的名称,它将返回常量。默认值为 XS_SUBNAME。子子例程具有 _
和名称长度附加,因此具有 10 个字符名称的常量将在 constant_10
中,默认值为 XS_SUBNAME。
Nicholas Clark <[email protected]> 基于 Larry Wall 和其他人编写的 h2xs
中的代码