当您为代码生成指定一个系统目标文件时,代码生成器可以构建一个可以在开发计算机上运行的独立的可执行程序。为了构建可执行程序,代码生成器使用选定的编译器和工具链或模板生成文件(TMF)构建过程方法生成的生成文件。makefile生成过程的一部分是在生成的makefile中添加编译所需的源文件、头文件和库文件信息(依赖项)。或者,对于特定的应用程序,您可以通过配置管理系统添加生成的文件和文件依赖项。
为模型生成的代码由一组小文件组成。(见管理构建过程文件.)这些文件依赖于其他文件,这是因为:
头文件包含
宏观声明
函数调用
变量声明
模型或外部代码出于各种原因引入依赖项:
模型中的块生成使函数调用的代码。这些呼叫可能以多种形式发生:
包含的源文件(不是生成的)声明了被调用的函数。在块集这样的情况下,通过将它们编译成库文件来管理这些源文件依赖项。
生成的代码调用编译器提供的运行时库中的函数。
某些功能依赖项也是生成的文件,它被称为共享实用程序。一些示例是定点实用程序和非有限支持功能。金宝app这些依赖项称为共享实用程序。生成的函数可以出现在“独立模型的构建文件夹”中的文件中。_Sharedutils.
文件夹下面slprj
涉及模型引用的构建文件夹。
具有连续时间的模型需要求解器源代码文件。
代码生成器选项,如外部模式、C API和mat文件日志记录。
外部代码指定依赖关系。
代码生成器提供了几种机制来将文件依赖关系信息输入到构建过程中。机制取决于依赖关系是基于块的还是基于模型或系统目标文件的。
对于块依赖,考虑使用:
S-functions和blocksets
添加包含S-Function Mex-Files的文件夹,该文件将模型用于标题包含路径。
为这些文件夹创建makefile规则,以便查找源代码。
使用S-Function块参数指定其他源文件名sfunctionmodules.
.
属性指定其他依赖项rtwmakecfg.m
机制。看使用rtwmakecfg。m API来定制生成的makefile.
有关将这些方法应用到遗留代码或外部代码集成的更多信息,请参见使用遗留代码工具将外部代码调用导入生成的代码中.
S-function Builder块,它为其自己的UI提供了指定依赖信息
对于基于模型或系统目标文件的依赖关系,例如外部头文件,考虑使用:
这代码生成>自定义代码窗格中的。您可以指定其他库、源文件和包括文件夹。
薄层色谱功能LibAddToCommonIncludes ()
和libaddtomodelsources()
.您可以在TLC阶段指定依赖项。看LibAddToCommonIncludes (incFileName)和libaddsourcefilecustomsection(文件,内置,新闻).嵌入式编码器®产品还提供了一种基于TLC的自定义模板,用于生成附加源文件。
对于工具链方法或模板生成文件(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将此文件夹中的源文件包含在构建过程中SRC
makefile的变量。
文件夹中的头文件matlabroot / rtw走读生/包括
文件夹中的头文件matlabroot 金宝app/ simulink /包括
这些文件夹包含额外的头文件依赖项,比如tmwtypes.h.
那simstruc_types.h
,simstruc.h
.
笔记
对于基于ert的系统目标文件,您可以避免多个标题依赖项。基于ert的系统目标文件在文件中生成最小类型定义,宏等集合RTWTYPES.H.
.
块集产品带有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_rtwslprj
文件夹。不要使用路径#包括
相对于生成的源文件位置的语句。例如,如果您的MATLAB代码生成文件夹为c: \工作
,则构建过程生成
将源文件放入子文件夹中,例如:模型
.c
c: \ \ model_ert_rtw \ model.c工作
这
文件模型
.c#包括
表格的陈述:
#include ". \feature1\foo.h" #include ". \feature2\bar.h"
最好使用其他建议的方法之一,因为相对路径会创建对代码生成器文件夹结构的依赖关系。