Main Content

转移或共享生成的代码

要转移或共享静态代码和生成的代码文件,您可以使用 packNGo 函数。例如,将生成的代码转移到不提供 MATLAB® 和 Simulink® 产品的开发环境中时,请使用该函数。

打包并转移生成的代码

要打包生成的代码,请执行以下操作:

  1. 在 Configuration Parameters 系统对话框中,选择 Package code and artifacts。此选项将编译过程配置为在代码生成后运行 packNGo 函数。

  2. Zip file name 字段中,输入要在其中打包生成的代码和工件的 ZIP 文件的名称。指定文件名时可以使用 .zip 扩展名,也可以不使用。如果您没有指定扩展名或指定 .zip 以外的扩展名,ZIP 实用工具会添加 .zip 扩展名。如果您未指定值,则编译过程将使用名称 model.zip,其中 model 是顶层模型的名称。

  3. 应用此更改,然后为您的模型生成代码。

  4. 使用 ZIP 工具检查生成的 ZIP 文件,以验证打包的代码是否已准备好进行转移。

将 ZIP 文件转移到目标开发环境中,并使用 ZIP 工具来解包该文件。要编译解包后的代码,请使用编译工具。

如果目标环境提供 Simulink Coder™ 或 Embedded Coder®,可以使用 codebuild 来编译解包后的代码。

从命令行打包并转移生成的代码

要使用行命令打包和转移生成的代码,请使用以下工作流:

选择 ZIP 文件的结构

在为模型编译生成和打包文件之前,请决定将文件打包为扁平文件夹结构还是分层文件夹结构。默认情况下,packNGo 函数将文件打包在单一的扁平文件夹结构中。

如果...则使用...
您将文件转移到不使用生成的联编文件的 IDE,或者代码不依赖于所需静态文件的相对位置单一、扁平文件夹结构
目标开发环境必须保持与源环境相同的文件夹结构,因为它使用生成的联编文件,或者代码依赖于文件的相对位置分层结构

如果使用层次结构,则 packNGo 函数会创建两个层级的 zip 文件,即一个主 zip 文件包含以下次级 zip 文件:

  • mlrFiles.zip - 您的 matlabroot 文件夹树中的文件

  • sDirFiles.zip - 您的编译文件夹中的文件,您在该文件夹中为模型启动了代码生成

  • otherFiles.zip - 不在 matlabrootstart 文件夹树中的必需文件

次级 zip 文件的路径相对于主 zip 文件的根文件夹,文件夹结构与源开发文件夹结构相同。

选择 Zip 文件的名称

默认情况下,packNGo 函数将主 zip 文件命名为 model。您可以选择指定不同名称。如果指定文件名并省略文件类型扩展名,则该函数会将 . 追加到您指定的名称。

在 Zip 文件中打包模型代码

使用 PostCodeGenCommand 配置参数、packNGo 函数和模型的编译信息对象对模型代码文件进行打包。您可以设置打包操作以使用:

  • 系统生成的编译信息对象。

    如果是这种情况,则在生成模型代码之前,请使用 set_param 将配置参数 PostCodeGenCommand 设置为显式调用 packNGo 函数。例如:

    set_param(bdroot, 'PostCodeGenCommand', 'packNGo(buildInfo);');

    在生成模型代码并写入磁盘后、但在生成联编文件前,此命令指示编译过程计算对 packNGo 的调用。此命令为当前选定的模型使用系统生成的编译信息对象。

  • 以编程方式构造的编译信息对象。

    在这种情况下,可使用其他编译信息函数有选择地将路径和文件包含在您随后使用 packNGo 函数指定的编译信息对象中。例如:

    .
    .
    .
    myModelBuildInfo = RTW.BuildInfo;
    addSourceFiles(myModelBuildInfo, {'test1.c' 'test2.c' 'driver.c'});
    .
    .
    .
    packNGo(myModelBuildInfo);

以下示例说明如何更改 packNGo 的默认行为。

如需执行以下操作... 指定...
将文件打包的结构更改为分层结构packNGo(buildInfo, 'packType' 'hierarchical');
重命名主 zip 文件packNGo(buildInfo, 'fileName' 'zippedsrcs');
将文件打包的结构更改为分层结构并重命名主 zip 文件packNGo(buildInfo, 'packType' 'hierarchical'...
'fileName' 'zippedsrcs');
zip 文件中包含 include 路径上的头文件packNGo(buildInfo, 'minimalHeaders' false);
为解析错误和缺失文件生成警告packNGo(buildInfo, 'ignoreParseError' true...
'ignoreFileMissing' true);

注意

packNGo 函数可以修改作为函数的第一个参数传递的 RTW.BuildInfo 对象中的编译信息。该函数可能会根据存储在模型的编译信息中的源和 include 路径找到其他文件,并且将该信息添加到 RTW.BuildInfo 对象中。

检查生成的 ZIP 文件

要验证生成的 ZIP 文件是否已准备好进行转移,请使用 ZIP 工具检查该文件。一些 ZIP 工具允许您在不解包文件的情况下查看文件内容。如果模型代码文件已打包为分层结构且需要解包,则需要解包主 ZIP 文件和次级 ZIP 文件。当您解包次级 ZIP 文件时,文件的相对路径将保留。

转移并解包 ZIP 文件

将 ZIP 文件转移到目标开发环境中,并使用 ZIP 工具来解包该文件。要编译解包后的代码,请使用编译工具。

如果目标环境提供 Simulink Coder 或 Embedded Coder,可以使用 codebuild 来编译解包后的代码。

代码打包示例

此示例说明如何对为示例模型 rtwdemo_rtwintro 生成的代码文件进行打包:

  1. 将您的工作文件夹设置为可写文件夹。

  2. 打开模型 rtwdemo_rtwintro 并在您的工作文件夹中保存一份副本。

  3. 在命令行窗口中,输入:

    set_param('rtwdemo_rtwintro', 'PostCodeGenCommand',...
    'packNGo(buildInfo, ''packType'' ''hierarchical'')');
  4. 为模型生成代码。

  5. 检查生成的 ZIP 文件 rtwdemo_rtwintro.zip。ZIP 文件包含两个次级 ZIP 文件,即 mlrFiles.zipsDirFiles.zip

  6. 检查 mlrFiles.zipsDirFiles.zip

  7. 将 ZIP 文件转移到您的目标文件夹并解包。

  8. 要编译解包的代码,请使用 codebuild 函数。

限制

packNGo 函数

有关适用于此函数的限制的信息,请参阅 packNGo

具有非默认扩展名的可执行文件

如果编译过程使用联编文件模板方式,则 packNGo 会使用链接器工具指定的可执行文件扩展名来确定需要打包的二进制工件。

如果生成具有非默认扩展名的可执行文件,请检查该扩展名是否保存在与联编文件模板关联的工具链中。有关详细信息,请参阅将模板联编文件与工具链相关联

如果编译过程生成的可执行文件的扩展名不同于工具链中保存的扩展名,packNGo 不会打包该可执行文件。

另请参阅

|

相关主题