内容

名称

xsubpp - 将 Perl XS 代码编译为 C 代码的编译器

概要

xsubpp [-v] [-except] [-s pattern] [-prototypes] [-noversioncheck] [-nolinenumbers] [-nooptimize] [-typemap typemap] [-output filename]... file.xs

说明

此编译器通常由 ExtUtils::MakeMakerModule::Build 或其他 Perl 模块构建工具创建的 Makefile 运行。

xsubpp 将通过嵌入必要的构造来编译 XS 代码为 C 代码,以便 C 函数可以操作 Perl 值,并创建必要的粘合剂,以便 Perl 可以访问这些函数。编译器使用类型映射来确定如何将 C 函数参数和变量映射到 Perl 值。

编译器将搜索名为 typemap 的类型映射文件。它将使用以下搜索路径查找默认类型映射,最右边的类型映射优先。

../../../typemap:../../typemap:../typemap:typemap

它还将使用安装为 ExtUtils::typemap 的默认类型映射。

选项

请注意,XSOPT MakeMaker 选项可用于将这些选项添加到 MakeMaker 生成的任何 Makefile 中。

-hiertype

在类型名称中保留 '::',以便可以映射 C++ 层次类型。

-except

向 C 代码添加异常处理存根。

-typemap typemap

指示用户提供的类型映射应优先于默认类型映射。此选项可多次使用,最后一次使用的类型映射优先级最高。

-output filename

指定要生成的输出文件名。如果未指定文件,输出将写入标准输出。

-v

xsubpp 版本号打印到标准输出,然后退出。

-prototypes

默认情况下,xsubpp 不会自动为所有 xsub 生成原型代码。此标志将启用原型。

-noversioncheck

禁用运行时测试,该测试用于确定对象文件(源自 .xs 文件)和 .pm 文件是否具有相同的版本号。

-nolinenumbers

防止在输出中包含“#line”指令。

-nooptimize

禁用某些优化。当前受影响的唯一优化是输出 C 代码使用 target(请参阅 perlguts)。这可能会显著降低生成代码的速度,但这是 5.005 及更早版本的 xsubpp 的工作方式。

-noinout

禁用对 INOUT_LISTINOUT_LIST 声明的识别。

-noargtypes

禁用对函数签名类似 ANSI 的描述的识别。

-C++

目前没有任何作用。此标志在许多版本的 perl 中都是无操作的,至少可以追溯到 perl5.003_07。这里允许它用于向后兼容性。

-s=...-strip=...

此选项不明显且不建议使用。

如果指定,则在生成的 XS 函数中,给定字符串将从 C 函数名称的开头剥离(如果以该前缀开头)。这仅适用于不带 CODEPPCODE 块的 XSUB。例如,XS

void foo_bar(int i);

当使用 -s foo_ 调用 xsubpp 时,将在 Perl 中安装一个 foo_bar 函数,但在 C 中实际调用 bar(i)。大多数情况下,这与您想要的结果相反,并且失败模式有点模糊,因此请尽可能避免使用此选项。

环境

不使用环境变量。

作者

最初由 Larry Wall 编写。由 Ken Williams 转换为 ExtUtils::ParseXS 模块。

修改历史记录

请参阅文件 Changes

另请参阅

perl(1)、perlxs(1)、perlxstut(1)、ExtUtils::ParseXS