xsubpp - 将 Perl XS 代码编译为 C 代码的编译器
xsubpp [-v] [-except] [-s pattern] [-prototypes] [-noversioncheck] [-nolinenumbers] [-nooptimize] [-typemap typemap] [-output filename]... file.xs
此编译器通常由 ExtUtils::MakeMaker 或 Module::Build 或其他 Perl 模块构建工具创建的 Makefile 运行。
xsubpp 将通过嵌入必要的构造来编译 XS 代码为 C 代码,以便 C 函数可以操作 Perl 值,并创建必要的粘合剂,以便 Perl 可以访问这些函数。编译器使用类型映射来确定如何将 C 函数参数和变量映射到 Perl 值。
编译器将搜索名为 typemap 的类型映射文件。它将使用以下搜索路径查找默认类型映射,最右边的类型映射优先。
../../../typemap:../../typemap:../typemap:typemap
它还将使用安装为 ExtUtils::typemap
的默认类型映射。
请注意,XSOPT
MakeMaker 选项可用于将这些选项添加到 MakeMaker 生成的任何 Makefile 中。
在类型名称中保留 '::',以便可以映射 C++ 层次类型。
向 C 代码添加异常处理存根。
指示用户提供的类型映射应优先于默认类型映射。此选项可多次使用,最后一次使用的类型映射优先级最高。
指定要生成的输出文件名。如果未指定文件,输出将写入标准输出。
将 xsubpp 版本号打印到标准输出,然后退出。
默认情况下,xsubpp 不会自动为所有 xsub 生成原型代码。此标志将启用原型。
禁用运行时测试,该测试用于确定对象文件(源自 .xs
文件)和 .pm
文件是否具有相同的版本号。
防止在输出中包含“#line”指令。
禁用某些优化。当前受影响的唯一优化是输出 C 代码使用 target(请参阅 perlguts)。这可能会显著降低生成代码的速度,但这是 5.005 及更早版本的 xsubpp 的工作方式。
禁用对 IN
、OUT_LIST
和 INOUT_LIST
声明的识别。
禁用对函数签名类似 ANSI 的描述的识别。
目前没有任何作用。此标志在许多版本的 perl 中都是无操作的,至少可以追溯到 perl5.003_07。这里允许它用于向后兼容性。
此选项不明显且不建议使用。
如果指定,则在生成的 XS 函数中,给定字符串将从 C 函数名称的开头剥离(如果以该前缀开头)。这仅适用于不带 CODE
或 PPCODE
块的 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