配置编译设置
指定编译类型
编译类型
MATLAB® Coder™ 可以生成以下输出类型的代码:
MEX 函数
独立 C/C++ 代码
独立 C/C++ 代码并将其编译为静态库
独立 C/C++ 代码并将其编译为动态链接库
独立 C/C++ 代码并将其编译为可执行文件
注意
生成可执行文件时,必须提供包含
main
函数的 C/C++ 文件,如指定 C/C++ 可执行文件的主函数中所述。
生成的文件的位置
默认情况下,MATLAB Coder 根据输出类型在输出文件夹中生成文件。有关详细信息,请参阅Generated Files and Locations。
注意
每次 MATLAB Coder 为相同的代码或工程生成相同类型的输出时,都会删除上一次编译生成的文件。如果要保留某次编译生成的文件,请在开始新的编译之前将这些文件复制到其他位置。
使用 MATLAB Coder 指定编译类型
要打开生成对话框,请在生成代码页上点击生成箭头 。
将编译类型设置为以下项之一。
源代码
MEX
静态库
动态库
可执行文件
如果选择源代码,MATLAB Coder 将不会调用 make 命令,也不会生成编译的目标代码。如果您在修改 MATLAB 代码和生成 C/C++ 代码之间进行迭代并且要检查生成的代码,此选项可以节省时间。如果想用自己的编译器编译生成的代码,也可以使用此选项。此选项等同于选中了仅生成代码框的静态库。
代码生成对 MEX 函数和其他编译类型使用不同的配置参数集。当您在 MEX 函数和源代码、静态库、动态库或可执行文件之间切换输出类型时,请验证这些设置。
某些配置参数与 MEX 和独立代码生成相关。如果您在输出类型为 MEX 函数时启用这些参数中的任何参数,并且您要在 C/C++ 代码生成中也使用相同的设置,则必须为 C/C++ 静态库、C/C++ 动态库和 C/C++ 可执行文件再次启用它。
在命令行中指定编译类型
使用 -config
选项调用 codegen
。例如,假设您有不需要输入参数的主函数 foo
。下表显示在编译 foo
时如何指定不同输出类型。如果主函数有输入参数,则必须指定这些输入。有关详细信息,请参阅Specify Types of Entry-Point Function Inputs。
注意
C 语言是使用 MATLAB Coder 生成代码的默认语言。要生成 C++ 代码,请参阅指定用于代码生成的语言。
要生成: | 请使用以下命令: |
---|---|
MEX 函数(使用默认代码生成选项) |
codegen foo |
MEX 函数(指定代码生成选项) |
cfg = coder.config('mex'); % Set configuration parameters, for example, % enable a code generation report cfg.GenerateReport=true; % Call codegen, passing the configuration % object codegen -config cfg foo |
独立 C/C++ 代码并将其编译为库(使用默认代码生成选项) | codegen -config:lib foo |
独立 C/C++ 代码并将其编译为库(指定代码生成选项) |
cfg = coder.config('lib'); % Set configuration parameters, for example, % enable a code generation report cfg.GenerateReport=true; % Call codegen, passing the configuration % object codegen -config cfg foo |
独立 C/C++ 代码并将其编译为可执行文件(使用默认代码生成选项并在命令行中指定 main.c 文件) |
codegen -config:exe main.c foo 注意 您必须指定 |
独立 C/C++ 代码并将其编译为可执行文件(指定代码生成选项) |
cfg = coder.config('exe'); % Set configuration parameters, for example, % specify main file cfg.CustomSource = 'main.c'; cfg.CustomInclude = 'c:\myfiles'; codegen -config cfg foo 注意 您必须指定 |
指定用于代码生成的语言
MATLAB Coder 可以生成 C 或 C++ 库和可执行文件。C 是默认语言。您可以从工程设置对话框或命令行显式指定语言。
使用 MATLAB Coder 指定语言
要打开生成对话框,请在生成代码页上点击生成箭头 。
将语言设置为 C 或 C++。
注意
如果您指定
C++
,MATLAB Coder 会将C
代码包装到.cpp
文件中。您可以使用C++
编译器并与外部C++
应用程序对接。MATLAB Coder 不生成C++
类。
使用命令行界面指定语言
为您的目标语言选择合适的编译器。
创建用于代码生成的配置对象。例如,对于库,请使用:
cfg = coder.config('lib');
将
TargetLang
属性设置为'C'
或'C++'
。例如:cfg.TargetLang = 'C++';
注意
如果您指定
C++
,MATLAB Coder 会将C
代码包装到.cpp
文件中。然后,您可以使用C++
编译器并与外部C++
应用程序对接。MATLAB Coder 不生成C++
类。
另请参阅
指定输出文件名
使用 MATLAB Coder 指定输出文件名
要打开生成对话框,请在生成代码页上点击生成箭头 。
在输出文件名字段中,输入文件名。
注意
文件名中不能包含空格。
默认情况下,如果第一个入口 MATLAB 文件的名称为 fcn1
,则输出文件名为:
fcn1
(对于 C/C++ 库和可执行文件)。fcn1_mex
(对于 MEX 函数)。
默认情况下,MATLAB Coder 在文件夹
中生成文件:project_folder
/codegen/target/fcn1
project_folder
是您的当前工程文件夹target
是:mex
(对于 MEX 函数)lib
(对于静态 C/C++ 库)dll
(对于动态 C/C++ 库)exe
(对于 C/C++ 可执行文件)
命令行替代方法
使用 codegen
函数和 -o
选项。
指定输出文件位置
使用 MATLAB Coder 指定输出文件位置
输出文件位置不能包含:
空格(在某些操作系统配置中,空格可能导致代码生成失败)。
制表符
\
,$
,#
,*
,?
非 7 位 ASCII 字符,如日文字符。
要打开生成对话框,请在生成代码页上点击生成箭头 。
将编译类型设置为源代码、静态库、动态库或可执行文件(取决于您的具体要求)。
点击更多设置。
点击路径选项卡。
编译文件夹字段的默认设置为工程文件夹的子文件夹。默认情况下,MATLAB Coder 在文件夹
中生成文件:project_folder
/codegen/target/fcn1fcn1
是按字母顺序排列的第一个入口文件的名称。target
是:mex
(对于 MEX 函数)lib
(对于静态 C/C++ 库)dll
(对于动态链接的 C/C++ 库)exe
(对于 C/C++ 可执行文件)
要更改输出位置,您可以使用下列方法之一:
将编译文件夹设置为当前 MATLAB 工作文件夹的子文件夹
MATLAB Coder 将在
文件夹中生成文件MATLAB_working_folder
/codegen/target/fcn1将编译文件夹设置为指定文件夹。在编译文件夹名称字段中,提供文件夹的路径。
命令行替代方法
使用 codegen
函数和 -d
选项。
参数设定方法
如果您使用 | 使用 | 详细信息 |
---|---|---|
MATLAB Coder | 工程设置对话框。 | 指定编译配置参数 MATLAB Coder |
codegen (在命令行中)并希望指定一些参数 | 配置对象 | 使用配置对象在命令行中指定编译配置参数 |
codegen (在编译脚本中) | ||
codegen (在命令行中)并希望指定许多参数 | 配置对象对话框 | 使用对话框在命令行中指定编译配置参数 |
指定编译配置参数
您可以从 MATLAB Coder 工程设置对话框、命令行或配置对象对话框指定编译配置参数。
指定编译配置参数 MATLAB Coder
要打开生成对话框,请在生成代码页上点击生成箭头 。
将编译类型设置为源代码、静态库、动态库或可执行文件(取决于您的具体要求)。
点击更多设置。
工程设置对话框提供适用于您选择的输出类型的配置参数集。代码生成对 MEX 函数和其他编译类型使用不同的配置参数集。当您在 MEX 函数和源代码、静态库、动态库或可执行文件之间切换输出类型时,请验证这些设置。
某些配置参数与 MEX 和独立代码生成相关。如果您在输出类型为 MEX 函数时启用这些参数中的任何参数,并且您要在 C/C++ 代码生成中也使用相同的设置,则必须为 C/C++ 静态库、C/C++ 动态库和 C/C++ 可执行文件再次启用它。
根据需要修改参数。有关选项卡上的参数的详细信息,请点击帮助。
对参数设置的更改会立即生效。
使用配置对象在命令行中指定编译配置参数
配置对象的类型. codegen
函数使用配置对象来自定义您的代码生成环境。下表列出了可用的配置对象。
配置对象 | 描述 |
---|---|
如果没有可用的 Embedded Coder® 许可证或禁用了 Embedded Coder 许可证,请指定 C/C++ 库或可执行文件生成的参数。 | |
如果 Embedded Coder 许可证可用,请指定 C/C++ 库或可执行文件生成的参数。 | |
指定目标硬件实现的参数。如果未指定, | |
指定 MEX 代码生成的参数。 |
使用配置对象. 要使用配置对象来自定义代码生成的环境,请执行以下操作:
在 MATLAB 工作区中,定义配置对象变量,如创建配置对象中所述。
例如,要生成用于 C 静态库生成的配置对象,请执行以下操作:
cfg = coder.config('lib'); % Returns a coder.CodeConfig object if no % Embedded Coder license available. % Otherwise, returns a coder.EmbeddedCodeConfig object.
根据需要使用以下方法之一修改配置对象的参数:
交互式命令,如使用配置对象在命令行中指定编译配置参数中所述
对话框,如使用对话框在命令行中指定编译配置参数中所述
使用
-config
选项调用codegen
函数。将配置对象指定为其参量。-config
选项会根据配置属性值,指示codegen
为目标生成代码。在以下示例中,codegen
基于在第一步中定义的代码生成配置对象cfg
的参数,从 MATLAB 函数foo
生成 C 静态库:codegen -config cfg foo
-config
选项指定要编译的输出的类型 - 在本例中为 C 静态库。有关详细信息,请参阅codegen
。
创建配置对象. 您可以在 MATLAB 工作区中定义配置对象。
要创建... | 使用如下命令... |
---|---|
MEX 配置对象 coder.MexCodeConfig | cfg = coder.config('mex'); |
用于生成独立 C/C++ 库或可执行文件的代码生成配置对象coder.CodeConfig | % To generate a static library cfg = coder.config('lib'); % To generate a dynamic library cfg = coder.config('dll') % To generate an executable cfg = coder.config('exe'); 注意 如果 Embedded Coder 许可证可用,请创建一个 如果使用并发许可证,要禁用 Embedded Coder 许可证的签出,请使用以下命令之一: cfg = coder.config('lib', 'ecoder', false) cfg = coder.config('dll', 'ecoder', false) cfg = coder.config('exe', 'ecoder', false) |
用于为嵌入式目标生成独立 C/C++ 库或可执行文件的代码生成配置对象coder.EmbeddedCodeConfig | % To generate a static library cfg = coder.config('lib'); % To generate a dynamic library cfg = coder.config('dll') % To generate an executable cfg = coder.config('exe'); 注意 需要提供 Embedded Coder 许可证;否则请创建 |
硬件实现配置对象coder.HardwareImplementation | hwcfg = coder.HardwareImplementation |
每个配置对象都附带一组参数,初始化为默认值。您可以更改这些设置,如使用圆点表示法在命令行中修改配置对象中所述。
使用圆点表示法在命令行中修改配置对象. 您可以使用圆点表示法一次修改一个配置对象参数的值。请使用以下语法:
configuration_object.property = value
圆点表示法使用赋值语句来修改配置对象属性:
要在 C/C++ 代码生成期间指定
main
函数,请执行以下操作:cfg = coder.config('exe'); cfg.CustomInclude = 'c:\myfiles'; cfg.CustomSource = 'main.c'; codegen -config cfg foo
要在生成 C/C++ 静态库后自动生成并启动代码生成报告,请执行以下操作:
cfg = coder.config('lib'); cfg.GenerateReport= true; cfg.LaunchReport = true; codegen -config cfg foo
保存配置对象. 配置对象不会在 MATLAB 会话之间自动保留。请使用以下方法之一保留您的设置:
使用对话框在命令行中指定编译配置参数
在创建配置对象后,可以使用配置参数对话框修改对象的属性。请参阅Specify Configuration Parameters in Command-Line Workflow Interactively。