主要内容

添加构建过程依赖项

当您为代码生成指定一个系统目标文件时,代码生成器可以构建一个可以在开发计算机上运行的独立的可执行程序。为了构建可执行程序,代码生成器使用选定的编译器和工具链或模板生成文件(TMF)构建过程方法生成的生成文件。makefile生成过程的一部分是在生成的makefile中添加编译所需的源文件、头文件和库文件信息(依赖项)。或者,对于特定的应用程序,您可以通过配置管理系统添加生成的文件和文件依赖项。

为模型生成的代码由一组小文件组成。(见管理构建过程文件.)这些文件依赖于其他文件,这是因为:

  • 头文件包含

  • 宏观声明

  • 函数调用

  • 变量声明

模型或外部代码出于各种原因引入依赖项:

  • 模型中的块生成使函数调用的代码。这些呼叫可能以多种形式发生:

    • 包含的源文件(不是生成的)声明了被调用的函数。在块集这样的情况下,通过将它们编译成库文件来管理这些源文件依赖项。

    • 生成的代码调用编译器提供的运行时库中的函数。

    • 某些功能依赖项也是生成的文件,它被称为共享实用程序。一些示例是定点实用程序和非有限支持功能。金宝app这些依赖项称为共享实用程序。生成的函数可以出现在“独立模型的构建文件夹”中的文件中。_Sharedutils.文件夹下面slprj涉及模型引用的构建文件夹。

  • 具有连续时间的模型需要求解器源代码文件。

  • 代码生成器选项,如外部模式、C API和mat文件日志记录。

  • 外部代码指定依赖关系。

构建过程的文件依赖关系信息

代码生成器提供了几种机制来将文件依赖关系信息输入到构建过程中。机制取决于依赖关系是基于块的还是基于模型或系统目标文件的。

对于块依赖,考虑使用:

对于基于模型或系统目标文件的依赖关系,例如外部头文件,考虑使用:

生成的makefile依赖关系

对于工具链方法或模板生成文件(TMF)方法构建过程,代码生成器生成一个生成文件。对于TMFs,生成的makefile提供了令牌扩展,构建过程在其中扩展makefile中的不同令牌,以包含额外的依赖信息。生成的makefile包含完整的依赖项信息。看自定义模板makefile

生成的makefile包含:

  • 源文件依赖项的名称

  • 源文件所在的文件夹

  • 标题文件的位置

  • 预编译库依赖项

  • 库,使实用程序编译并创建

一个财产使实用程序是,您不必为给定的源C或c++文件指定特定的位置。如果存在用于该文件夹的规则,并且源文件名是makefile中的先决条件,则make实用程序可以找到源文件并编译它。C或c++编译器(预处理器)不需要头文件的绝对路径。编译器通过使用头文件的名称查找头文件#包括指令和包括路径。生成的C或C ++源代码取决于此标准编译器功能。

库被创建和链接,但是屏蔽了程序调用的特定函数。

这些属性可以使难以手动确定文件依赖性的最小列表。您可以将Makefile用作起点以确定生成的代码中的依赖项。

确定依赖关系的另一种方法是使用链接器信息(例如链接器映射文件)来确定符号依赖性。地图文件提供代码生成器和块字段源和标头文件的位置,以帮助定位依赖项。

代码生成器静态文件依赖项

Matlab中的几个位置®文件夹树包含特定于代码生成器的静态文件依赖项:

  • matlabroot/ RTW / C / SRC打开的)

    此文件夹具有子文件夹,包含必须编译其他文件。示例包括求解器功能(用于连续时间支持),外部模式支持文件,C API支持文件和S函数支持文件。金宝app将此文件夹中的源文件包含在构建过​​程中SRCmakefile的变量。

  • 文件夹中的头文件matlabroot / rtw走读生/包括

  • 文件夹中的头文件matlabroot 金宝app/ simulink /包括

    这些文件夹包含额外的头文件依赖项,比如tmwtypes.h.simstruc_types.h,simstruc.h

    笔记

    对于基于ert的系统目标文件,您可以避免多个标题依赖项。基于ert的系统目标文件在文件中生成最小类型定义,宏等集合RTWTYPES.H.

SelletSet静态文件依赖项

块集产品带有s功能下载188bet金宝搏代码应用rtwmakecfg.m为代码生成器提供依赖项信息的机制。这rtwmakecfg.m来自区块集的文件包含区块集的包含路径和源路径依赖项的列表。通常,块集从生成的模型代码可以链接到的源文件创建库。控件时将创建并标识库rtwmakecfg.m机制。

找到rtwmakecfg.m在MATLAB安装的树中,使用以下命令:

>> which -all rtwmakecfg.m

的列表中列出的一个或多个块集哪一个命令,可以从各自的文件夹和文件依赖关系信息中确定rtwmakecfg.m文件。

构建过程的文件夹依赖关系信息

你可以加#包括生成代码的语句。此类引用可以来自多个来源,包括用于联系S函数,自定义存储类,总线对象和数据类型对象的TLC脚本。包含的文件由外部代码或其他自定义的标头文件组成。您可以指定编译器包括路径-我编译器选项。构建过程使用指定的路径来搜索包含的头文件。

生成代码的使用场景包括但不限于:

  • 自定义构建过程编译生成的代码,这些代码需要一组特定于环境的#包括陈述。

    在这种情况下,构建过程在选择“模型配置”参数时调用代码生成器仅生成代码.可以考虑使用完全限定路径、相对路径或仅使用#包括陈述。使用包括路径。

  • 构建过程编译生成的代码。

    在这种情况下,您可以指定编译器包含路径(-我)以几种方式为构建过程:

    • 控件上指定其他包含路径代码生成>自定义代码窗格中的。代码生成器将包含路径传播到生成的makefile中。

    • rtwmakecfg.m机制允许S函数引入附加包括路径到构建过程中。代码生成器将包含路径传播到生成的makefile中。

    • 当构建使用自定义系统目标文件并且基于makefile的模型时,您可以直接将包含路径添加到系统目标文件使用的模板makefile中。

    • 使用使命令指定user_includes.使变量定义一个文件夹,其中构建过程搜索包含的文件。例如:

      make_rtw USER_INCLUDES = id: \ \ feature1工作

      构建过程将自定义包含传递给make实用程序的命令行调用,后者将它们添加到传递给编译器的总体标志中。

使用#包括语句和包含路径

考虑以下使用方法#包括语句和包含路径的构建过程,以生成可移植的代码,并最小化与未来版本的兼容性问题。

假设其他头文件是:

c: \ \ feature1 \工作foo c: \ \ feature2 \ bar.h工作
  • 一种方法是包括在内#包括语句只显示文件名,例如:

    #include“foo.h”#include“bar.h”

    然后,传递给编译器的include路径包含头文件所在的文件夹:

    cc -Ic:\work\feature1 -Ic:\work\feature2…
  • 另一种方法是使用相对路径#包括语句并为这些相对路径提供包含包含路径的锚折叠文件夹,例如:

    #include“feature1 \ foo.h”#include“feature2 \ bar.h”

然后,指定锚文件夹(例如\工作)到编译器:

cc -ic:\工作......

避免这些文件夹依赖

当使用构建过程时,避免依赖于构建过程中的文件夹代码生成的文件夹, 如那个模型_ert_rtw文件夹或slprj文件夹。不要使用路径#包括相对于生成的源文件位置的语句。例如,如果您的MATLAB代码生成文件夹为c: \工作,则构建过程生成模型.c将源文件放入子文件夹中,例如:

c: \ \ model_ert_rtw \ model.c工作

模型.c文件#包括表格的陈述:

#include ". \feature1\foo.h" #include ". \feature2\bar.h"

最好使用其他建议的方法之一,因为相对路径会创建对代码生成器文件夹结构的依赖关系。

相关的话题