clibgen.generateLibraryDefinition
为 C++ 库创建定义文件
语法
说明
clibgen.generateLibraryDefinition 函数创建一个具有 .m 文件扩展名的定义文件,用于生成 C++ 库的 MATLAB® 接口。使用此函数可以:
选择定义接口的 C/C++ 文件。有关要使用哪种语法的指导,请参阅提示中的“库中的文件”。
选择生成步骤使用的配置。
(可选)指定用于定义参量的配置。
(可选)指定编译器编译配置参量。
创建定义文件后,您可以选择修改内容,以包含函数无法自动定义的功能。有关使用库定义文件的信息,请参阅Define MATLAB Interface for C++ Library。
您需要 MATLAB 支持的 C++ 编译器。您必须使用与编译该 C++ 库时所用的相同编译器来编译接口库。如果您的库完全由源文件定义(不使用编译库文件),则您可以选择任何受支持的 C++ 编译器来编译接口库。有关 C++ 编译器的信息,请键入:
mex -setup cpp
对定义文件调用 build 函数,以创建 MATLAB 接口文件。
clibgen.generateLibraryDefinition( 创建由 InterfaceGenerationFiles,Libraries=LibraryFiles)InterfaceGenerationFiles 和 LibraryFiles 定义的定义文件。
定义文件的名称是 define (自 R2022b 起)。默认情况下,libName.mlibName 是 InterfaceGenerationFiles 中指定的第一个文件的文件名。例如,如果您指定名为 mylibrary.hpp 的头文件,则函数会创建一个名为 definemylibrary.m 的定义文件。如果指定多个接口生成文件,则必须使用 InterfaceName 名称-值参量来指定 libName。
clibgen.generateLibraryDefinition( 创建一个由多个头文件、源文件和(如果需要)编译库文件定义的库的接口。InterfaceGenerationFiles,SupportingSourceFiles=SourceFiles)
clibgen.generateLibraryDefinition( 创建一个完全由 InterfaceGenerationFiles)InterfaceGenerationFiles 定义的库。如果您的库包含编译库文件,则必须指定 Libraries 参量。
clibgen.generateLibraryDefinition(___, 使用一个或多个名称-值参量创建该文件。可将此选项与上述语法中的任何输入参量组合一起使用。Name=Value)
示例
输入参数
名称-值参数
限制
不支持将
LibraryDefinition对象definelibName保存到 MAT 文件中。避免在文件夹名称和文件名中使用非 ASCII 字符,因为某些区域设置不支持这些字符。有关区域设置的信息,请参阅设置区域设置和显示语言。
提示
要重新创建库定义文件,请调用
clibgen.generateLibraryDefinition,并将名称-值参量OverwriteExistingDefinitionFiles设置为true。使用此选项时,该函数会删除文件,包括您可能对文件所做的编辑。有关故障排除信息,请参阅Troubleshooting C++ Library Definition Issues。
您的库可能包含 C/C++ 头文件、源文件和编译库文件的组合。下表显示如何根据定义库的文件类型将参量设置为
clibgen.generateLibraryDefinition。您库中的文件
InterfaceGenerationFiles
参量名称-值参量 Windows 上的单个 CPP 头文件和导入库文件。
A.hpp文件夹
C:\Documents\MATLAB\中的A.lib导入库文件
"A.hpp"Libraries="C:\Documents\MATLAB\A.lib"Linux 上的 CPP 头文件和编译的目标文件。
A.hpp文件夹
~/MATLAB/中的A.so
"A.hpp"Libraries="~/MATLAB/A.so"macOS 上的 CPP 头文件和动态编译库文件。
A.hpp文件夹
$home/Documents/MATLAB中的A.dylib
"A.hpp"Libraries="$home/Documents/MATLAB/A.dylib"完全由 CPP 头文件和源文件定义。没有库文件。
头文件
A.hpp源文件
A.cpp
示例:头文件和 C++ 源文件
"A.hpp"SupportingSourceFiles="A.cpp"多个 CPP 头文件、一个源文件和一个编译库文件。创建名为
A的接口。头文件
A.hpp和B.hpp源文件
A.cppC:\Documents\MATLAB\中的编译库文件B.lib
["A.hpp","B.hpp"]InterfaceName="A"a
Libraries="C:\Documents\MATLAB\B.lib"
SupportingSourceFiles="A.cpp"只包含 CPP 头文件的库。该库完全在头文件中定义,没有编译库文件。
A.hpp
"A.hpp"不适用
完全在 CPP 源文件中定义,并且没有编译库文件。
A.cpp
"A.cpp"不适用
完全由 C 头文件和源文件定义。没有库文件。
A.hA.c
"A.h"SupportingSourceFiles="A.c"
CLinkage=trueWindows 上的单个 C 头文件和导入库文件。
A.hC:\Documents\MATLAB\中的A.lib
"A.h"Libraries="C:\Documents\MATLAB\A.lib"
CLinkage=trueCPP 源文件依赖 C 头文件和源文件。
源文件
myCPP.cppC:\Documents\MATLAB\中的头文件和源文件A.h和A.c
"myCPP.cpp"SupportingSourceFiles="C:\Documents\MATLAB\A.c"C 库依赖 CPP 源文件。
C:\Documents\MATLAB\中的头文件和源文件A.h和A.c源文件
myCPP.cpp
["C:\Documents\MATLAB\A.h", "myCPP.cpp"]InterfaceName="myCPP"
SupportingSourceFiles="C:\Documents\MATLAB\A.c"
CLinkage=true由 CPP 和 C 头文件定义的库,对应的库文件位于
C:\Documents\MATLAB\。myCPP.hppmyCPP.libmyC.hmyC.lib
["myCPP.hpp","myC.h"]InterfaceName="myCPP"
Libraries=["C:\Documents\MATLAB\myCPP.lib","C:\Documents\MATLAB\myC.lib"]
CLinkage=trueC 头文件依赖 CPP 头文件。
A.hC:\Documents\MATLAB\中的B.hpp
"A.h"IncludePath="C:\Documents\MATLAB\"a Because you have multiple header files, you must set the
InterfaceNamename-value argument. For example, if you setInterfaceNameto"A", then when you call library functionfunctionnamefrom MATLAB, the syntax isclib.A.functionname.
替代功能
实时任务
调用 clibPublishInterfaceWorkflow 函数以使用生成 C++ 接口实时任务。