文件

使用rtwmakecfg。m API来定制生成的makefile

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

  • 源文件夹

  • 包括文件夹

  • 库名称

  • 模块对象

关于RTWMAKECFG函数

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

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

  1. 创建MATLAB®RTWMAKECFG.功能在rtwmakecfg.m文件。代码生成器根据文件夹位置将该文件与s函数关联。创建RTWMAKECFG函数描述了对的要求RTWMAKECFG.函数及其返回的数据。

  2. 如果您使用的是模板makefile方法,请修改目标的TMF,以使其支持宏扩展以获取信息的信息金宝appRTWMAKECFG.函数返回。修改RTWMAKECFG的模板makefile描述所需的修改。如果您使用的是工具链方法,则rtwmakecfg函数返回的信息将由生成的makefile使用;无需进一步配置。

在构建过程的TLC阶段之后,当生成一个makefile时,代码生成器搜索一个rtwmakecfg.m包含S函数MEX文件的文件夹中的文件。如果它找到该文件,构建过程会调用RTWMAKECFG.功能。

创建RTWMAKECFG函数

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

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

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包含空格,构建过程不会将路径转换为其非空间等效物。如果您打算支持的构建环境不支持路径中的空格,请参阅金宝app为带空格的文件夹名称启用构建过程

修改RTWMAKECFG的模板makefile

扩展信息RTWMAKECFG.函数生成时,在目标的TMF中修改以下部分:

  • 包括路径

  • C旗帜和/或附加图书馆

  • 规则

这些TMF代码示例可能不适用于make实用程序。有关其他示例,请参阅位于的GRT或ERT tmf草根grt / rtw / c /打开)或草根/ RTW / C / ERT打开).

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

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

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

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

包括=我。我. .$ (MATLAB_INCLUDES) (ADD_INCLUDES) (USER_INCLUDES)美元

将库名称添加到makefile

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

bbb = |> start_precomp_libraries <| Libs += |> expand_library_name <|. aspxa |>END_PRECOMP_LIBRARIES<| |>START_EXPAND_LIBRARIES<| LIBS += |>EXPAND_LIBRARY_NAME<|. |>END_PRECOMP_LIBRARIES<| |>START_EXPAND_LIBRARIES<| LIBS += |>EXPAND_LIBRARY_NAME<|. bbb一个| > 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<|。o \ |>END_EXPAND_MODULES<| |>EXPAND_LIBRARY_NAME<|。a: $(MAKEFILE) rtw_proj. exe . exetmw $ (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. exe . exetmw $ (MODULES_ | > EXPAND_LIBRARY_NAME < |: % . o = $ (BLD) / % . o) @ $(空白)@echo创建$ @ $ # # # (AR) - r $ @ $ (MODULES_ | > EXPAND_LIBRARY_NAME < |: % . o = $ (BLD) / % . o) | > END_PRECOMP_LIBRARIES < |
这个话题有用吗?