工具链方法和构建的模板Makefile方法允许您将以下项目添加到生成的makefiles:
源文件夹
包括文件夹
图书馆名称
模块对象
使用A.RTWMAKECFG.
函数,在S-函数的构建操作期间将此信息添加到Makefile。当RTWMAKECFG.
函数在指定添加源和库时是有用的,以构建包含一个或多个S函数块的模型。
要将与S-Function相关的信息添加到Makefile:
创建matlab.®语言RTWMAKECFG.
功能在RTWMAKECFG.M.
文件。代码生成器基于其文件夹位置将此文件与S函数相关联。创建RTWMAKECFG函数描述了对的要求RTWMAKECFG.
功能和返回的数据。
如果您使用的是模板makefile方法,请修改目标的TMF,以使其支持宏扩展以获取信息的信息金宝appRTWMAKECFG.
函数返回。修改RTWMAKECFG的模板makefile描述所需的修改。如果您使用的是工具链方法,则生成的Makefile使用RTWMakeCFG函数返回的信息;不需要进一步配置。
在构建过程的TLC阶段之后,在生成Makefile时,代码生成器搜索RTWMAKECFG.M.
包含S函数MEX文件的文件夹中的文件。如果它找到该文件,构建过程会调用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.
函数生成,在目标的TMF中修改以下部分:
包括路径
C旗帜
和/或附加图书馆
规则
这些TMF代码示例可能不适用于您的实用程序。有关其他示例,请参阅位于的GRT或ERT TMFS
。matlabroot.
/工具箱/编码器/编译/ TMF
以下TMF代码示例将文件夹名称添加到生成的makefile中的包含路径:
add_includes = \ |> start_expand_includes <|-i |> expand_dir_name <|\ |> end_expand_includes <|
此外,add_includes.
必须将宏添加到包括
线。
包括= -i。-i .. $(add_includes)$(user_includes)
以下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 <|
有关更多信息,请参阅在构建过程中控制库位置和命名。
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<|