主要内容

使用rtwmakecfg.m api自定义生成的makefiles

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

  • 源文件夹

  • 包括文件夹

  • 图书馆名称

  • 模块对象

关于RTWMAKECFG函数

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

要将与S-Function相关的信息添加到Makefile:

  1. 创建matlab.®语言RTWMAKECFG.功能在RTWMAKECFG.M.文件。代码生成器基于其文件夹位置将此文件与S函数相关联。创建RTWMAKECFG函数描述了对的要求RTWMAKECFG.功能和返回的数据。

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

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

创建RTWMAKECFG函数

创造RTWMAKECFG.M.包含该文件的文件RTWMAKECFG.在与您的s函数组件相同的文件夹中的函数(具有平台依赖扩展的MEX文件,例如Mexext.关于微软®窗户®系统)。该函数必须返回包含这些字段的结构化阵列。

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

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

元素 描述
makeinfo.library(n).name 一个字符数组,指定库的名称(没有扩展名)。
makeinfo.library(n)。位置 一个字符数组,指定在预编译时库所在的文件夹。有关更多信息,请参阅以下描述makeInfo.precompile.在前面的表中。目标可以使用targetprecompliblocation.参数覆盖此值。看指定预编译库的位置
makeinfo.library(n).modules 小区数组,用于指定包括库的C或C ++源文件基数(没有扩展)。不包含文件扩展名。Makefile附加对象扩展名。

注意

makeinfo.library.字段必须完全指定每个库以及如何构建它。模块列表中makeinfo.library(n).modules元素不能为空。要指定仅限链接库,请使用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.M.API包含空格,构建过程不会将路径转换为其非空间等效物。如果您打算支持的构建环境不支持路径中的空格,请参阅金宝app构建具有空格或特殊字符的文件金宝app夹名称的流程支持

修改RTWMAKECFG的模板makefile

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

  • 包括路径

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

  • 规则

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

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

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

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

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

包括= -i。-i .. $(add_includes)$(user_includes)

将库名称添加到makefile

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

libs = |> start_precomp_libraries <|libs + = |> expand_library_name <| .a |> end_precomp_libraries <||> start_expand_libraries <|libs + = |> expand_library_name <| .a |> end_expand_libraries <|

有关更多信息,请参阅在构建过程中控制库位置和命名

将规则添加到makefile

TMF代码示例将规则添加到生成的Makefile中。

|> start_expand_rules <|$(bld)/%。o:|> expand_dir_name <| /%。C $(src)/ $(makefile)rtw_proj.tmw @ $(空白)@echo ###“|> expent_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.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) @$(BLANK) @echo ### Creating $@ $(AR) -r $@ $(MODULES_|>EXPAND_LIBRARY_NAME<|:%.o=$(BLD)/%.o) |>END_PRECOMP_LIBRARIES<|