文档

构建过程添加依赖关系

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

生成的代码的模型由一个小的文件集。(见管理构建过程文件)。这些文件依赖于其他文件,由于发生:

  • 头文件包含

  • 宏声明

  • 函数调用

  • 变量声明

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

  • 在模型中生成代码块,使函数调用。这些调用可以发生在几种形式:

    • 包括源文件(而不是生成的)声明被调用的函数。在如blockset情况下,管理这些源文件被编译成库文件的依赖关系。

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

    • 一些函数依赖关系也生成的文件,这被称为共享公用事业。一些例子是定点公用事业和非谓语形式的支持功能。金宝app这些依赖项被称为共享公用事业。生成的函数可以出现在为独立的模型或建立文件夹中的文件_sharedutils文件夹下的slprj文件夹的构建涉及模型参考。

  • 模型与连续时间需要解决源代码文件。

  • 代码生成器选择外部模式,如C API, MAT-file日志记录。

  • 外部代码指定依赖项。

信息添加文件的依赖关系信息构建过程,见以下:

文件依赖信息构建过程

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

块依赖关系,考虑使用:

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

生成Makefile的依赖性

工具链方法或模板makefile (TMF)方法构建过程,代码生成器生成一个makefile。tmf的生成makefile的扩张提供了令牌在makefile构建过程扩展不同的令牌包含额外的依赖信息。由此产生的makefile包含完整的依赖信息。看到自定义模板makefile

生成makefile包含:

  • 源文件依赖项的名称

  • 源文件所在的文件夹

  • 头文件的位置

  • 预编译的库依赖关系

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

一个属性的使公用事业是你不必指定具体的位置对于一个给定的C或c++源文件。如果一个规则存在的文件夹和源文件的名字是makefile的先决条件,使实用程序可以找到源文件和编译它。C或c++编译器(预处理)不需要头文件绝对路径。编译器发现头文件,通过使用一个头文件的名称# include指令和一个包含路径。生成的C或c++源代码取决于这个标准编译器的能力。

库创建和链接,但封闭程序调用的特定功能。

这些属性可以很难确定最小文件依赖手工的列表。您可以使用makefile作为起点来确定生成的代码的依赖关系。为例,展示了如何识别依赖关系,明白了与packNGo代码迁移到另一个开发环境

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

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

MATLAB的几个地方®文件夹树包含静态文件依赖特定的代码生成器:

  • matlabroot/ rtw / c / src(开放)

    这个文件夹有子文件夹,包含额外的文件必须被编译。例子包括解算器功能(连续时间支持),外部模式支持文件,C API支持文件和功能支持文件。金宝app包括源文件在这个文件夹的构建过程SRC变量的makefile。

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

  • 头文件的文件夹matlabroot 金宝app/模型/包括

    这些文件夹包含额外的头文件依赖关系等tmwtypes.h,simstruc_types.h,simstruc.h

    请注意

    ERT-based系统目标文件,您可以避免几个头的依赖性。ERT-based系统目标文件生成类型定义的最小设置,文件中的宏,等等,rtwtypes.h

Blockset静态文件的依赖关系

Blockset产下载188bet金宝搏品应用功能代码rtwmakecfg.m代码生成器提供依赖信息的机制。的rtwmakecfg.mblockset包含列表的文件包括blockset路径和源路径依赖。通常,blocksets创建一个图书馆从模型生成的源文件的代码可以链接。库创建和确认时使用rtwmakecfg.m机制。

来定位rtwmakecfg.m安装文件在MATLAB blocksets树,使用以下命令:

> > - rtwmakecfg.m

如果你编译模型使用一个或多个blocksets上市的哪一个命令,您可以确定从各自的文件夹和文件的依赖信息rtwmakecfg.m文件。

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

您可以添加# include语句生成的代码。这样的引用可以来自多个来源,包括薄层色谱脚本内联S-functions,自定义存储类,总线对象和数据类型的对象。头文件的包含文件由外部代码或其他定制。您可以指定编译器包括路径-我编译器选项。构建过程使用指定的路径搜索包含头文件。

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

  • 自定义构建过程编译生成的代码,需要一组特定于环境的# include语句。

    在这个场景中,构建过程调用代码生成器当您选择只生成代码复选框。考虑使用完全限定路径,相对路径,或者只是头文件的名字# include语句。使用包含路径。

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

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

    • 指定附加包括路径上代码生成>自定义代码面板的配置参数对话框。代码生成器将包括路径传播到生成makefile。

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

    • 当构建一个模型,该模型使用一个定制的系统目标文件makefile-based,包括路径可以直接添加到模板系统目标文件使用makefile。

    • 使用使命令来指定一个USER_INCLUDES使变量定义了一个构建过程搜索包含文件的文件夹。例如:

      make_rtw USER_INCLUDES = id: \ \ feature1工作

      构建过程通过自定义包括命令行调用的效用,这增加了他们整个标志传递给编译器。

使用# include报表,包括路径

考虑下面的方法使用# include报表,包括路径的构建过程来生成代码仍然便携式和最小化与未来版本兼容性问题。

假设其他头文件:

c: \ \ feature1 \ foo。h c: \ \ feature2 \ bar.h工作
  • 一个方法是包括的# include语句只有文件名称,如:

    # include " foo。h bar.h“# include

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

    cc的":\ \工作feature1 ": \ \ feature2工作……
  • 另一种方法是使用相对路径# include声明和提供一个锚使用include路径文件夹的相对路径,例如:

    #包括“feature1 \ foo。h feature2 \ bar.h“# include

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

cc的":\工作……

避免这些文件夹的依赖性

使用构建过程时,避免在构建过程依赖于文件夹代码生成的文件夹(金宝app模型),等模型_ert_rtw文件夹或slprj文件夹中。不要使用路径# include语句相对于生成的源文件的位置。例如,如果您的MATLAB代码生成文件夹c: \工作构建过程生成模型。c源文件到一个文件夹,例如:

c: \ \ model_ert_rtw \ model.c工作

模型。c文件# include语句的形式:

#包括“. . \ feature1 \ foo。h . . \ feature2 \ bar.h“# include

最好使用的另一个建议方法,因为相对路径依赖代码生成器创建一个文件夹结构。

相关的话题

这个主题有帮助吗?