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 模組可以 AUTOLOAD 在 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
。不需要巨集的值。
一個傳回單一純量的函式,其中有 #define
定義,用於在產生的 C 和 XS 函式之間內部使用的常數。
一個函式,用於產生 XS 程式碼來實作 perl 子常式 PACKAGE::constant,由 PACKAGE::AUTOLOAD 用於載入常數。這個 XS 程式碼是一個包裝器,包裝在通常由 C_constant
產生、通常命名為 constant
的 C 子常式周圍。
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 為 true,AUTOLOAD 子常式會對 constant() 常式無法辨識的所有名稱回退至 AutoLoader::AUTOLOAD。
WriteMakefileSnippet 屬性 => 值 [, ...]
一個函數,用於產生 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 <nick@ccl4.org>,根據 Larry Wall 和其他人在 h2xs
中的程式碼