主要内容

添加构建过程依赖项

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

模型的生成代码由一小组文件组成。(看管理构建过程文件。)这些文件在其他文件上具有依赖关系,这会导致:

  • 标题文件夹杂物

  • 宏观声明

  • 函数调用

  • 变量声明

由于各种原因,模型或外部代码介绍了依赖项:

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

    • 包含源文件(未生成)声明被叫函数。在诸如Slockset(例如块集)中,通过将它们编译到库文件中来管理这些源文件依赖性。

    • 生成的代码拨打了编译器提供的运行时库中的函数。

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

  • 具有连续时间的模型需要索盘源代码文件。

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

  • 外部代码指定依赖项。

构建过程的文件依赖性信息

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

对于块依赖项,请考虑使用:

  • S函数和块块

    • 添加包含S-Function MEX-Files的文件夹,该文件将模型用于标题的标题包括路径。

    • 为这些文件夹创建Makefile规则,以允许查找源代码。

    • 使用S-Function块参数指定其他源文件名SFUNCTIOMODULES.

    • 属性指定其他依赖项rtwmakecfg.m机制。看使用rtwmakecfg。m API自定义生成makefile

    有关将这些方法应用于遗留或外部代码集成的更多信息,请参见使用遗留代码工具将外部代码导入外部代码的调用

  • S-Function Builder块,它为其自己的UI提供了指定依赖信息

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

生成的makefile依赖关系

对于Toolchain方法或模板Makefile(TMF)方法构建过程,代码生成器会生成Makefile。对于TMFS,生成的Makefile提供了令牌扩展,其中构建过程在Makefile中扩展了不同的曲折,以包括附加依赖信息。生成的makefile包含完整的依赖信息。看自定义模板makefiles.

生成的makefile包含:

  • 源文件依赖项的名称

  • 源文件所在的文件夹

  • 标题文件的位置

  • 预编译库依赖项

  • 图书馆使实用程序编译并创建

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

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

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

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

代码生成器静态文件依赖关系

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

  • matlabroot/ RTW / C / SRC打开

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

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

  • 文件夹中的头文件matlabroot 万博1manbetx/ simulink /包括

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

    笔记

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

blockset静态文件依赖项

具有S函数代码的Ss manbetx 845lockSet产品应用rtwmakecfg.m提供具有依赖信息的代码生成器的机制。这rtwmakecfg.m来自块集的文件包含块集的包含路径和源路径依赖项的列表。通常,块集从源文件创建一个库,生成的模型代码可以链接到源文件。类时将创建和标识库rtwmakecfg.m机制。

找到rtwmakecfg.mMATLAB安装树中的BlockSets文件,使用以下命令:

>>  - 所有rtwmakecfg.m

如果您编译的模型使用由此列出的一个或多个块集哪一个命令,您可以从相应的文件中确定文件夹和文件依赖性信息rtwmakecfg.m文件。

生成过程的文件夹依赖项信息

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

生成代码的使用情况包括但不限于以下内容:

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

    在这种情况下,构建过程在选择Model Configuration参数时调用代码生成器仅生成代码。考虑使用完全限定的路径,相对路径或只是头文件名#包括陈述。使用包括路径。

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

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

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

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

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

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

      make_rtw user_includes = -Id:\ work \ feature1

      构建过程将自定义include传递给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:\ work \ model_ert_rtw \ model.c

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

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

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

相关的话题