Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

配置编译设置

指定编译类型

编译类型

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 App 指定编译类型

  1. 要打开 Generate 对话框,请在 Generate Code 页上点击 Generate 箭头

  2. Build type 设置为以下项之一。

    • Source Code

    • MEX

    • Static Library

    • Dynamic Library

    • Executable

如果选择 “Source Code”,MATLAB Coder 将不会调用 make 命令,也不会生成编译的目标代码。如果您在修改 MATLAB 代码和生成 C/C++ 代码之间进行迭代并且要检查生成的代码,此选项可以节省时间。此选项等同于选中了 Generate code only 框的 “Static Library”。

代码生成对 MEX 函数和其他编译类型使用不同的配置参数集。当您在 “MEX Function” 和 “Source”、“Static Library”、“Dynamic Library” 或 “Executable” 之间切换输出类型时,请验证这些设置。

某些配置参数与 MEX 和独立代码生成相关。如果您在输出类型为 “MEX Function” 时启用这些参数中的任何参数,并且您要在 C/C++ 代码生成中也使用相同的设置,则必须为 “C/C++ Static Library”、“C/C++ Dynamic Library” 和 “C/C++ Executable” 再次启用它。

在命令行中指定编译类型

使用 -config 选项调用 codegen。例如,假设您有不需要输入参数的主函数 foo。下表显示在编译 foo 时如何指定不同输出类型。如果主函数有输入参数,则必须指定这些输入。有关详细信息,请参阅Specify Properties 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

注意

您必须指定 main 函数才能生成 C/C++ 可执行文件。请查阅指定 C/C++ 可执行文件的主函数

独立 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

注意

您必须指定 main 函数才能生成 C/C++ 可执行文件。请查阅指定 C/C++ 可执行文件的主函数

指定用于代码生成的语言

MATLAB Coder 可以生成 C 或 C++ 库和可执行文件。C 是默认语言。您可以从工程设置对话框或命令行显式指定语言。

使用 MATLAB Coder App 指定语言

  1. 要打开 Generate 对话框,请在 Generate Code 页上点击 Generate 箭头

  2. Language 设置为 “C” 或 “C++”。

    注意

    如果您指定 C++MATLAB Coder 会将 C 代码封装到 .cpp 文件中。您可以使用 C++ 编译器并与外部 C++ 应用程序对接。MATLAB Coder 不生成 C++ 类。

使用命令行界面指定语言

  1. 为您的目标语言选择合适的编译器。

  2. 创建用于代码生成的配置对象。例如,对于库,请使用:

    cfg = coder.config('lib');

  3. TargetLang 属性设置为 'C''C++'。例如:

    cfg.TargetLang = 'C++';

    注意

    如果您指定 C++MATLAB Coder 会将 C 代码封装到 .cpp 文件中。然后,您可以使用 C++ 编译器并与外部 C++ 应用程序对接。MATLAB Coder 不生成 C++ 类。

另请参阅

指定输出文件名

使用 MATLAB Coder App 指定输出文件名

  1. 要打开 Generate 对话框,请在 Generate Code 页上点击 Generate 箭头

  2. Output file name 字段中,输入文件名。

注意

文件名中不能包含空格。

默认情况下,如果第一个入口 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 App 指定输出文件位置

输出文件位置不能包含:

  • 空格(在某些操作系统配置中,空格可能导致代码生成失败)。

  • 制表符

  • \$#*?

  • 非 7 位 ASCII 字符,如日文字符。

  1. 要打开 Generate 对话框,请在 Generate Code 页上点击 Generate 箭头

  2. Build type 设置为 “Source Code”、“Static Library”、“Dynamic Library” 或 “Executable”(取决于您的具体要求)。

  3. 点击 More settings

  4. 点击 Paths 选项卡。

    Build folder 字段的默认设置为 “A subfolder of the project folder”。默认情况下,MATLAB Coder 在文件夹 project_folder/codegen/target/fcn1 中生成文件:

    • fcn1 是按字母顺序排列的第一个入口文件的名称。

    • target 是:

      • mex(对于 MEX 函数)

      • lib(对于静态 C/C++ 库)

      • dll(对于动态链接的 C/C++ 库)

      • exe(对于 C/C++ 可执行文件)

  5. 要更改输出位置,您可以使用下列方法之一:

    • Build Folder 设置为 “A subfolder of the current MATLAB working folder

      MATLAB Coder 将在 MATLAB_working_folder/codegen/target/fcn1 文件夹中生成文件

    • Build Folder 设置为 “Specified folder”。在 Build folder name 字段中,提供文件夹的路径。

命令行替代方法

使用 codegen 函数和 -d 选项。

参数设定方法

如果您使用使用详细信息
MATLAB Coder App工程设置对话框。 指定编译配置参数 MATLAB Coder App
codegen(在命令行中)并希望指定一些参数配置对象使用配置对象在命令行中指定编译配置参数
codegen(在编译脚本中)
codegen(在命令行中)并希望指定许多参数配置对象对话框使用对话框在命令行中指定编译配置参数

指定编译配置参数

您可以从 MATLAB Coder 工程设置对话框、命令行或配置对象对话框指定编译配置参数。

指定编译配置参数 MATLAB Coder App

  1. 要打开 Generate 对话框,请在 Generate Code 页上点击 Generate 箭头

  2. Build type 设置为 “Source Code”、“Static Library”、“Dynamic Library” 或 “Executable”(取决于您的具体要求)。

  3. 点击 More settings

    工程设置对话框提供适用于您选择的输出类型的配置参数集。代码生成对 MEX 函数和其他编译类型使用不同的配置参数集。当您在 “MEX Function” 和 “Source Code”、“Static Library”、“Dynamic Library” 或 “Executable” 之间切换输出类型时,请验证这些设置。

    某些配置参数与 MEX 和独立代码生成相关。如果您在输出类型为 “MEX Function” 时启用这些参数中的任何参数,并且您要在 C/C++ 代码生成中也使用相同的设置,则必须为 “C/C++ Static Library”、“C/C++ Dynamic Library” 和 “C/C++ Executable” 再次启用它。

  4. 根据需要修改参数。有关选项卡上的参数的详细信息,请点击 Help

    对参数设置的更改会立即生效。

使用配置对象在命令行中指定编译配置参数

配置对象的类型.  codegen 函数使用配置对象来自定义您的代码生成环境。下表列出了可用的配置对象。

配置对象说明

coder.CodeConfig

如果没有可用的 Embedded Coder® 许可证或禁用了 Embedded Coder 许可证,请指定 C/C++ 库或可执行文件生成的参数。

coder.EmbeddedCodeConfig

如果 Embedded Coder 许可证可用,请指定 C/C++ 库或可执行文件生成的参数。

coder.HardwareImplementation

指定目标硬件实现的参数。如果未指定,codegen 会生成与 MATLAB 主机兼容的代码。

coder.MexCodeConfig

指定 MEX 代码生成的参数。

使用配置对象.  要使用配置对象来自定义代码生成的环境,请执行以下操作:

  1. 在 MATLAB 工作区中,定义配置对象变量,如创建配置对象中所述。

    例如,要生成用于 C 静态库生成的配置对象,请执行以下操作:

    cfg = coder.config('lib');
    % Returns a coder.CodeConfig object if no
    % Embedded Coder license available. 
    % Otherwise, returns a coder.EmbeddedCodeConfig object.

  2. 根据需要使用以下方法之一修改配置对象的参数:

  3. 使用 -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 许可证可用,请创建一个 coder.EmbeddedCodeConfig 对象。

如果使用并发许可证,要禁用 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.CodeConfig 对象。

硬件实现配置对象

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 会话之间自动保留。请使用以下方法之一保留您的设置:

 将配置对象保存到 MAT 文件,然后在下一个会话中加载该 MAT 文件

 编写用于创建配置对象并设置其属性的脚本。

使用对话框在命令行中指定编译配置参数

在创建配置对象后,可以使用配置参数对话框修改对象的属性。请参阅Specify Configuration Parameters in Command-Line Workflow Interactively