英语法语西班牙语

Ad


OnWorks 网站图标

h2xs - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 h2xs

这是命令 h2xs,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


h2xs - 将 .h C 头文件转换为 Perl 扩展名

概要


H2XS [配置 ...] [头文件 ... [extra_libraries]]

H2XS -h|-?| - 帮帮我

商品描述


H2XS 从 C 头文件构建 Perl 扩展。 扩展将包括功能
可用于检索 C 头文件中的任何 #define 语句的值
文件。

模块名称 将用于扩展名。 如果 module_name 不是
提供然后将使用第一个头文件的名称,第一个字符
大写。

如果扩展可能需要额外的库,则应将它们包含在此处。 扩展名
Makefile.PL 将负责检查这些库是否确实存在以及它们是如何存在的
应该加载。 额外的库应该以 -lm -lposix 等形式指定,
就像在 cc 命令行上一样。 默认情况下,Makefile.PL 将搜索
库路径由配置确定。 可以通过包含参数来扩充该路径
的形式 -L/另一个/图书馆/路径 在额外的库参数中。

尽管它的名字, H2XS 也可用于创建骨架纯 Perl 模块。 见
-X 选项。

配置


-A, --省略自动加载
省略所有自动加载设施。 这与 -c 但也删除了
.pm 文件中的“使用 AutoLoader”语句。

-B, - 测试版
使用 alpha/beta 样式的版本号。 导致版本号为“0.00_01”,除非
-v 已指定。

-C, --省略更改
省略创建 更改 文件,并将 HISTORY 部分添加到 POD 模板。

-F, --cpp-标志=添加标志
扫描函数头时要指定给 C 预处理器的附加标志
声明。 将这些选项写入生成的 生成文件 了。

-M, --func-掩码=定期 表达
选择要处理的函数/宏。

-O, --覆盖确定
允许覆盖预先存在的扩展目录。

-P, --省略-pod
省略自动生成的存根 POD 部分。

-X, --省略-XS
省略 XS 部分。 用于生成骨架纯 Perl 模块。 “-c”和“-f”是
隐式启用。

-a, --gen-访问器
为结构体和联合体的每个元素生成一个访问器方法。 生成的
方法以元素名称命名; 将返回当前值
元素如果在没有附加参数的情况下调用; 并将元素设置为
如果使用附加参数调用,则提供的值(并返回新值)。
嵌入的结构和联合作为指针返回,而不是完整的
结构,以方便链式调用。

这些方法都适用于结构的Ptr类型; 另外两种方法
为结构类型本身构造,“_to_ptr”返回一个 Ptr 类型
指向相同的结构,以及一个“新”的方法来构造和返回一个新的
结构,初始化为零。

-b, --compat-版本=版本
生成与指定的 perl 版本向后兼容的 .pm 文件。

对于 < 5.6.0 的版本,更改是。
- 不使用“我们的”(使用“使用变量”代替)
- 没有“使用警告”

指定比您使用的 perl 版本更高的兼容版本
运行 h2xs 将没有效果。 如果未指定 h2xs 将默认与
你用来运行 h2xs 的 perl 版本。

-c, --省略常数
省略 .xs 文件中的“constant()”和相应的专用“AUTOLOAD”
.pm 文件。

-d, - 调试
打开调试消息。

-e, --省略枚举=[定期 表达]
If 定期 表达 未给出,跳过在 C 中定义的所有常量
枚举。 否则只跳过那些在枚举中定义的常量
姓名匹配 定期 表达.

定期 表达 是可选的,请确保此开关后跟 at
如果您省略,则至少有一个其他开关 定期 表达 并有一些悬而未决的论点
比如头文件名。 还行吧:

h2xs -e -n 模块::Foo foo.h

这不行:

h2xs -n 模块::Foo -e foo.h

在后者中, foo.h 被视为 定期 表达.

-f, - 力量
允许为标头创建扩展,即使该标头在
标准包含目录。

-g, - 全球的
包含用于在 .xs 文件中安全存储静态数据的代码。 没有的扩展
使用静态数据可以忽略这个选项。

-h, -?, - 帮帮我
打印此 h2xs 的用法、帮助和版本并退出。

-k, --省略常量函数
对于声明为“const”的函数参数,在生成的
XS 代码。

-m, --gen-tied-var
实验: 对于在头文件中声明的每个变量,声明一个 perl
同名变量神奇地绑定到 C 变量。

-n, - 姓名=模块名称
指定用于扩展的名称,例如 -n RPC::DCE

-o, --不透明-re=定期 表达
对正则表达式匹配的 C 类型使用“不透明”数据类型,即使
这些类型是“typedef”——相当于来自类型映射的类型。 不应使用
也完全不需要 -x.

这可能很有用,因为,例如,“typedef”-等价于整数的类型可能
代表与操作系统相关的句柄,人们可能希望以面向对象的方式使用这些句柄,
如“$handle->do_something()”。 使用“-o”。 如果你想处理所有
“typedef”将类型定义为不透明类型。

匹配类型是白色的(除了逗号,它之前没有空格
它们,以及多个“*”,它们之间没有空格)。

-p, --删除前缀=字首
指定应该从 Perl 函数名称中删除的前缀,例如,
-p sec_rgy_ 这将设置 XS 字首 关键字并从函数中删除前缀
通过“constant()”机制自动加载。

-s, --const-subs=子1,子2
为指定的宏创建 perl 子例程,而不是使用
持续的() 子程序。 假定这些宏的返回类型为 坦克 *,
例如,-s sec_rgy_wildcard_name,sec_rgy_wildcard_sid。

-t, --默认类型=类型
指定内部类型 持续的() 机制用于宏。 默认的
是 IV(有符号整数)。 当前在标题扫描期间找到的所有宏
进程将被假定为具有这种类型。 “h2xs”的未来版本可能会获得
做出有根据的猜测的能力。

--使用新测试
什么时候 --compat-版本 (-b) 存在,生成的测试将使用“Test::More”
而不是“测试”,这是 5.6.2 之前版本的默认设置。 “测试::更多”将
添加到生成的“Makefile.PL”中的 PREREQ_PM。

--使用旧测试
将强制生成使用旧“测试”模块的测试代码。

--跳过出口商
不要使用“导出器”和/或导出任何符号。

--跳过 ppport
不要使用“Devel::PPPort”:不能移植到旧版本。

--跳过自动加载器
不要使用模块“AutoLoader”; 但保持 持续的() 功能和“子
AUTOLOAD”用于常量。

--跳过-严格
不要使用编译指示“严格”。

--跳过警告
不要使用编译指示“警告”。

-v, - 版=版本
指定此扩展的版本号。 这个版本号被添加到
模板。 默认值为 0.01,如果指定了“-B”,则为 0.00_01。 版本
指定的应该是数字。

-x, --autogen-xsubs
根据头文件中的函数声明自动生成 XSUB。 这
应该安装包“C::Scan”。 如果指定了此选项,则名称
头文件可能类似于“NAME1,NAME2”。 在这种情况下,使用 NAME1 而不是
指定的字符串,但仅针对文件中包含的声明发出 XSUB
姓名2。

请注意,函数的某些类型的参数/返回值可能会导致
需要手动编辑的 XSUB 声明/类型映射条目。 这些对象可能是
不能从/转换为指针(如“long long”)、函数指针或
数组。 另见“限制 -x".

示例


# 默认行为,扩展名是 Rusers
h2xs rpcsvc/ruse​​rs

# 相同,但扩展名是 RUSERS
h2xs -n RUSERS rpcsvc/ruse​​rs

# 扩展名是 rpcsvc::rusers。 仍然发现
h2xs rpcsvc::用户

# 扩展名是 ONC::RPC。 仍然发现
h2xs -n ONC::RPC rpcsvc/ruse​​rs

# 没有constant() 或AUTOLOAD
h2xs -c rpcsvc/ruse​​rs

# 为名为 RPC 的扩展创建模板
h2xs -cfn 远程过程调用

# 扩展名是 ONC::RPC。
h2xs -cfn ONC::RPC

# 扩展是一个纯 Perl 模块,没有 XS 代码。
h2xs -X 我的::模块

# 扩展名是 Lib::Foo,它至少适用于 Perl5.005_03。
# 为 h2xs 可以找到的所有 #defines 和枚举创建常量
# 在 foo.h 中。
h2xs -b 5.5.3 -n Lib::Foo foo.h

# 扩展名是 Lib::Foo,它至少适用于 Perl5.005_03。
# 为所有 #defines 创建常量,但只为枚举创建
# 名称不以“bar_”开头。
h2xs -b 5.5.3 -e '^bar_' -n Lib::Foo foo.h

# Makefile.PL 会在 -lrpc 中寻找库
# 附加目录/opt/net/lib
h2xs rpcsvc/ruse​​rs -L/opt/net/lib -lrpc

# 扩展名是 DCE::rgynbase
# 前缀“sec_rgy_”从 perl 函数名称中删除
h2xs -n DCE::rgynbase -p sec_rgy_dce/rgynbase

# 扩展名是 DCE::rgynbase
# 前缀“sec_rgy_”从 perl 函数名称中删除
# 子程序是为 sec_rgy_wildcard_name 和
#sec_rgy_wildcard_sid
h2xs -n DCE::rgynbase -p sec_rgy_ \
-s sec_rgy_wildcard_name,sec_rgy_wildcard_sid dce/rgynbase

# 在 perl.h 中创建没有定义但有函数声明的 XS
# 从 perl.h 可见。 扩展名是 perl1。
# 扫描 perl.h 时,定义 -DEXT=extern -DdEXT= -DINIT(x)=
# 下面有额外的反斜杠,因为字符串被传递给 shell。
# 注意带有 perl 头文件的目录
# 自动添加以包含路径。
h2xs -xAn perl1 -F "-DEXT=extern -DdEXT= -DINIT\(x\)=" perl.h

# 与从 perl.h 可见的 proto.h 中的函数声明相同。
h2xs -xAn perl2 perl.h,proto.h

# 相同但只选择匹配 /^av_/ 的函数
h2xs -M '^av_' -xAn perl2 perl.h,proto.h

# 相同但将 SV* 等视为“不透明”类型
h2xs -o '^[S]V \*$' -M '^av_' -xAn perl2 perl.h,proto.h

延期 基于 on .h .c
假设您有一些 C 文件实现了某些功能,以及相应的
头文件。 如何创建一个扩展,使这个功能可以在
珀尔? 下面的例子假设头文件是 接口_simple.h
接口_hairy.h,并且您希望将 perl 模块命名为“Ext::Ension”。 如果你需要
一些预处理器指令和/或与外部库的链接,请参阅标志“-F”,
“选项”中的“-L”和“-l”。

查找目录名称
从 h2xs 的虚拟运行开始:

h2xs -Afn 分机::Ension

此步骤的唯一目的是创建所需的目录,并让您知道
这些目录的名称。 从输出中您可以看到目录为
扩展名是 延期.

复制 C 文件
将你的头文件和 C 文件复制到这个目录 延期.

创建扩展
运行 h2xs,覆盖旧的自动生成文件:

h2xs -Oxan Ext::Ension 接口_simple.h 接口_hairy.h

h2xs 寻找头文件 after 切换到扩展目录,所以它会找到
你的头文件没问题。

存档和测试
像往常一样,运行

cd 扩展/扩展
perl 生成文件.PL
制作发行版
使
做测试

提示
尽早做“make dist”很重要。 这样你就可以轻松
合并(1) 如果您决定编辑“.h”文件和
重新运行 h2xs。

不要忘记编辑生成的文档 。下午 文件中。

仅将自动生成的文件视为骨架,您可能会发明更好的界面
比 h2xs 能猜到的。

仅将此部分视为指南,h2xs 的其他一些选项可能更适合
您的需求。

环境


没有使用环境变量。

使用 onworks.net 服务在线使用 h2xs


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad