主要内容

使用rtwmakecfg。m API自定义生成的Makefiles

请注意

要为s -函数定制生成的makefile,请使用MathWorks®推荐使用makecfg方法而不是rtwmakecfg函数。有关更多信息,请参见使用makecfg为S-Functions定制生成的makefile文件

构建的工具链方法和模板makefile方法都允许您向生成的makefile中添加以下项目:

  • 源文件夹

  • 包括文件夹

  • 库名称

  • 模块对象

关于rtwmakecfg函数

使用一个rtwmakecfg函数,则在s -函数的构建操作期间将此信息添加到makefile。的rtwmakecfg在指定添加的源和库来构建包含一个或多个s函数块的模型时,function非常有用。

向makefile中添加有关s函数的信息:

  1. 创建MATLAB®语言rtwmakecfgrtwmakecfg.m文件。代码生成器将此文件与基于其文件夹位置的s函数相关联。创建rtwmakecfg函数属性的需求rtwmakecfg函数及其返回的数据。

  2. 如果使用模板makefile方法,请修改目标的TMF,使其支持宏展开万博1manbetxrtwmakecfg函数返回。修改rtwmakecfg的模板制作文件描述所需的修改。如果您使用的是工具链方法,rtwmakecfg函数返回的信息将被生成的makefile使用;无需进行其他配置。

在构建过程的TLC阶段之后,当生成makefile时,代码生成器将搜索rtwmakecfg.mS-function MEX文件所在的文件夹中。如果找到该文件,构建过程将调用rtwmakecfg函数。

创建rtwmakecfg函数

创建rtwmakecfg.m包含rtwmakecfg函数与S-function组件(具有平台相关扩展名的mex文件,例如mexext在微软®窗户®系统)。函数必须返回一个包含这些字段的结构化数组。

描述
makeInfo.includePath 指定以行向量形式组织的其他包含文件夹名称的单元格数组。构建过程将文件夹名称展开为生成的makefile中的包含指令。
makeInfo.sourcePath 指定以行向量形式组织的其他源文件夹名称的单元格数组。中的文件的文件夹名称功能模块字段的“s功能块参数”对话框或进入SFunctionModules参数的块,如果他们不是在同一个文件夹s -函数。构建过程将文件夹名展开为生成的makefile中的make规则。
makeInfo.sources 指定额外源文件名(C或c++)的单元格数组,组织为行向量。不包括s函数或文件的名称输入功能模块字段的“s功能块参数”对话框或进入SFunctionModules块参数。构建过程将文件名展开为包含源文件的make变量。只指定文件名(带扩展名)。属性指定路径信息路径中字段。
makeInfo.linkLibsObjs 一个单元格数组,它指定指向生成代码链接的对象或库文件的其他完全限定路径。构建过程不编译指定的对象和库。但是,它在链接最终可执行文件时包含了它们。此包含对于合并不希望构建过程重新编译的库或源文件不可用的库非常有用。您还可以使用此元素集成来自C和c++以外语言的源文件。如果您首先在构建过程之外创建一个C兼容的对象文件或库,则可以实现这种集成。
makeInfo.precompile 属性中指定的库是否为rtwmakecfg.m文件存在于指定位置(预编译= = 1)或在构建过程中必须在构建文件夹中创建库(预编译= = 0).
makeInfo.library 一个结构数组,它指定附加的运行时库和模块对象,组织为行向量。构建过程将信息展开为生成的makefile中的make规则。有关库字段的列表,请参见下一个表。

makeInfo.library字段由以下元素组成。

元素 描述
makeInfo.library (n) . name 指定库名(不带扩展名)的字符数组。
makeInfo.library .Location (n) 一个字符数组,指定预编译时库所在的文件夹。有关详细信息,请参见makeInfo.precompile在上表中。对象可以使用TargetPreCompLibLocation参数重写此值。看到指定预编译库的位置
makeInfo.library .Modules (n) 一个单元格数组,指定组成库的C或c++源文件基名称(不带扩展名)。不要包含文件扩展名。makefile附加对象扩展名。

请注意

makeInfo.library字段必须完全指定每个库以及如何构建它。中的模块列表makeInfo.library .Modules (n)元素不能为空。要指定仅链接库,请使用makeInfo.linkLibsObjs字段。

例子:

disp(['从文件夹运行rtwmakecfg: ',pwd]);makeInfo.includePath= { fullfile(pwd, 'somedir2') }; makeInfo.sourcePath = {fullfile(pwd, 'somedir2'), fullfile(pwd, 'somedir3')}; makeInfo.sources = { 'src1.c', 'src2.cpp'}; makeInfo.linkLibsObjs = { fullfile(pwd, 'somedir3', 'src3.object'),... fullfile(pwd, 'somedir4', 'mylib.library')}; makeInfo.precompile = 1; makeInfo.library(1).Name = 'myprecompiledlib'; makeInfo.library(1).Location = fullfile(pwd,'somdir2','lib'); makeInfo.library(1).Modules = {'srcfile1' 'srcfile2' 'srcfile3' };

请注意

属性中指定的路径rtwmakecfg.mAPI包含空格,构建过程不会将路径转换为非空格的等效路径。如果您打算支持的构建环境不支持路径中的空格,请参考万博1manbetx对文件和文件夹名称的构建过程万博1manbetx支持

修改rtwmakecfg的模板制作文件

扩展an的信息rtwmakecfg函数生成,修改目标TMF中的以下部分:

  • 包括路径

  • C标志和/或附加的库

  • 规则

这些TMF代码示例可能不适用于make实用程序。有关其他示例,请参阅中的GRT或ERT tmfmatlabroot/工具箱/编码器/编译/ tmf

将文件夹名称添加到Makefile包含路径中

下面的TMF代码示例将文件夹名称添加到生成的makefile中的include路径中:

Add_includes = \ |> start_expand_includes <| -i |> expand_dir_name <| \ |> end_expand_includes <|

此外,ADD_INCLUDES宏必须添加到包括线。

包括= -i。我. .(ADD_INCLUDES) (USER_INCLUDES)美元

向Makefile添加库名称

下面的TMF代码示例将库名称添加到生成的makefile中。

Libs = |> > start_precomp_libraries <| Libs += |> expand_library_name <|. Libs = |>a |>END_PRECOMP_LIBRARIES<| |>START_EXPAND_LIBRARIES<| LIBS += |>EXPAND_LIBRARY_NAME<|. a >END_PRECOMP_LIBRARIES<| |>一个| > END_EXPAND_LIBRARIES < |

有关更多信息,请参见在构建期间控制库的位置和命名

向Makefile中添加规则

TMF代码示例向生成的makefile添加规则。

| > START_EXPAND_RULES < | $ (BLD) / %。o: | > EXPAND_DIR_NAME < | / % c (SRC) /美元rtw_proj MAKEFILE。tmw @ $(空白)@echo # # #”| > EXPAND_DIR_NAME < | \ * . c”(CC) $美元(CFLAGS) (APP_CFLAGS) - o (BLD)美元(DIRCHAR) *美元。o \ | > EXPAND_DIR_NAME < | (DIRCHAR) * . c >美元$ (BLD) $ $ * (DIRCHAR)。lst |>END_EXPAND_RULES<| |>START_EXPAND_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \ |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|. lst |>END_EXPAND_RULES<| |>o \ |>END_EXPAND_MODULES<| |>EXPAND_LIBRARY_NAME<|。a: $(MAKEFILE) rtw_proj。tmw $ (MODULES_ | > EXPAND_LIBRARY_NAME < |: % . o = $ (BLD) / % . o) @ $(空白)@echo创建$ @ $ # # # (AR) - r $ @ $ (MODULES_ | > EXPAND_LIBRARY_NAME < |: % . o = $ (BLD) / % . o) | > END_EXPAND_LIBRARIES < | | > START_PRECOMP_LIBRARIES < | MODULES_ | > EXPAND_LIBRARY_NAME < | = \ | > START_EXPAND_MODULES < | | > EXPAND_MODULE_NAME < |。o \ |>END_EXPAND_MODULES<| |>EXPAND_LIBRARY_NAME<|。a: $(MAKEFILE) rtw_proj。tmw $ (MODULES_ | > EXPAND_LIBRARY_NAME < |: % . o = $ (BLD) / % . o) @ $(空白)@echo创建$ @ $ # # # (AR) - r $ @ $ (MODULES_ | > EXPAND_LIBRARY_NAME < |: % . o = $ (BLD) / % . o) | > END_PRECOMP_LIBRARIES < |