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.cpp
C:\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.h
A.c
"A.h"
SupportingSourceFiles="A.c"
CLinkage=true
Windows 上的单个 C 头文件和导入库文件。
A.h
C:\Documents\MATLAB\
中的A.lib
"A.h"
Libraries="C:\Documents\MATLAB\A.lib"
CLinkage=true
CPP 源文件依赖 C 头文件和源文件。
源文件
myCPP.cpp
C:\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.hpp
myCPP.lib
myC.h
myC.lib
["myCPP.hpp","myC.h"]
InterfaceName="myCPP"
Libraries=["C:\Documents\MATLAB\myCPP.lib","C:\Documents\MATLAB\myC.lib"]
CLinkage=true
C 头文件依赖 CPP 头文件。
A.h
C:\Documents\MATLAB\
中的B.hpp
"A.h"
IncludePath="C:\Documents\MATLAB\"
a Because you have multiple header files, you must set the
InterfaceName
name-value argument. For example, if you setInterfaceName
to"A"
, then when you call library functionfunctionname
from MATLAB, the syntax isclib.A.functionname
.
替代功能
实时任务
调用 clibPublishInterfaceWorkflow
函数以使用生成 C++ 接口实时任务。