文档

自定义模板makefile

配置或定制一个模板makefile (TMF),您应该熟悉如何使命令的工作方式,以及它如何处理makefile。你也应该知道makefile构建规则。关于这些主题的信息,请参考附带的文档让你使用实用程序。

模板makefile和令牌

tmf的语句是由包含令牌。并创建一个makefile构建过程膨胀令牌,模型楼上。tmf旨在为具体的特定的平台上的编译器生成makefile。生成的模型楼上文件是根据从模型生成的代码编译和链接,使用命令特定于您的开发系统。

创建model.mk

模板Makefile令牌

make_rtw命令(或另一个命令提供一些目标)将生成的过程模型楼上。的make_rtw命令处理TMF上指定的代码生成面板的配置参数对话框。make_rtw复制TMF、逐行、扩大每个令牌。模板Makefile make_rtw标记扩展列出了令牌和扩张。

使用这些标记扩展makefile在几个方面:

  • 在makefile控制条件的行为。条件是用来控制源文件列表、库名称,目标建立,和其他与构建相关的信息。

  • 提供的宏定义编译文件,例如,-DINTEGER_CODE = 1

模板Makefile make_rtw标记扩展

令牌 扩张
通用

| > ADDITIONAL_LDFLAGS < |

链接器标记自动添加块。

| > ALT_MATLAB_BIN < |

交替MATLAB的完整路径名®可执行;价值是不同的价值MATLAB_BIN令牌当完整路径名包含空格。

| > ALT_MATLAB_ROOT < |

MATLAB安装备用完整路径名;价值是不同的价值MATLAB_ROOT令牌当完整路径名包含空格。

| > BUILDARGS < |

选项传递给make_rtw。这个令牌提供了这样的内容模型楼上当你改变构建文件变化参数,从而迫使一个更新的模块构建选项时改变。

| > COMBINE_OUTPUT_UPDATE_FCNS < |

真正的(1)单输出/更新功能被选中,否则假(0)。用于宏定义-DONESTEPFCN = 1

计算机< | | >

电脑类型。看到MATLAB电脑命令。

| > EXPAND_LIBRARY_LOCATION < |

预编译的库文件的位置。的TargetPreCompLibLocation配置参数可以覆盖该设置。有关示例,请参见在建立控制库位置和命名

| > EXPAND_LIBRARY_NAME < |

库名称。有关示例,请参见在建立控制库位置和命名修改模板rtwmakecfg Makefile

| > EXPAND_LIBRARY_SUFFIX < |

图书馆后缀。的TargetLibSuffix配置参数可以覆盖该设置。有关示例,请参见在建立控制库位置和命名

| > EXT_MODE < |

真正的(1),使一代的外部模式支持代码,否则假(0)。金宝app

| > EXTMODE_TRANSPORT < |

指数传输机制(例如,tcpip,串行外部模式)。

| > EXTMODE_STATIC < |

真正的(1)如果选择静态内存分配外部模式。假(0)如果选择动态内存分配。

| > EXTMODE_STATIC_SIZE < |

静态内存分配缓冲区的大小(如果有的话)外部模式。

| > GENERATE_ERT_S_FUNCTION < |

真正的(1)创建银块被选中,否则假(0)。用于控制makefile构建的目标。

| > INCLUDE_MDL_TERMINATE_FCN < |

真正的(1)终止功能要求被选中,否则假(0)。用于宏定义-DTERMFCN = = 1

| > INTEGER_CODE < |

真正的(1)金宝app支持浮点数不是选择,否则假(0)。INTEGER_CODE是一个必需的宏定义在编译源代码时和在选择使用预编译库链接。

| > MAKEFILE_NAME < |

模型楼上- - - - - -的名字从TMF创建makefile。

| > MAT_FILE < |

真正的(1)MAT-file日志被选中,否则假(0)。MAT_FILE是一个必需的宏定义在编译源代码时也用于构建过程包括日志代码。

| > MATLAB_BIN < |

MATLAB可执行文件的位置。

| > MATLAB_ROOT < |

MATLAB是安装位置。

| > MEM_ALLOC < |

要么RT_MALLOCRT_STATIC。显示内存是如何分配的。

| > MEXEXT < |

MEX-file扩展。看到MATLABmexext命令。

| > MODEL_MODULES < |

额外的生成源模块。例如,您可以一个大模型分割成两个文件,模型。c模型1.摄氏度。在这种情况下,这个令牌扩展模型1.摄氏度

| > MODEL_MODULES_OBJ < |

对象文件名(.obj)对应于附加生成的源模块。

| > MODEL_NAME < |

仿真软件的名称金宝app®框图目前正在建造。

< | | >多任务

真正的(1)如果解算器模式是多任务处理,否则假(0)。

| > NCSTATES < |

数量的连续状态。

| > NUMST < |

在模型中样本数量乘以。

| > PORTABLE_WORDSIZES < |

真正的(1)使便携式文字大小被选中,否则假(0)。

| > RELEASE_VERSION < |

MATLAB的发布版本。

| > S_FUNCTIONS < |

noninlined列表功能。

| > S_FUNCTIONS_LIB < |

可用于连接函数库的列表。

| > S_FUNCTIONS_OBJ < |

对象(.obj)文件列表对应noninlined s函数的来源。

< | | >解算器

解算器源文件名,例如,ode3.c

| > SOLVER_OBJ < |

解算器对象(.obj)文件名,例如,ode3.obj

| > TARGET_LANG_EXT < |

c语言选择C,cpp语言选择是c++。中使用makefile来控制生成的源文件的扩展。

| > TGT_FCN_LIB < |

指定编译器的命令行选项。在makefileTGT_FCN_LIB = | > TGT_FCN_LIB < |。在makefile中使用这个令牌条件语句指定一个标准的数学库的编译器选项。可能| > TGT_FCN_LIB < |令牌值:

价值 生成调用
自定义CRL的名字 ISO®/ IEC 9899:1990 C (ANSI_C)标准数学库
ISO_C ISO / IEC 9899:1999 C标准的数学库
ISO_C + + ISO / IEC 14882:2003 c++标准的数学库
GNU GNU C扩展ISO / IEC 9899:1999标准数学库

| > TID01EQ < |

真的(1)如果连续任务和第一个离散的采样率的任务是相等的,否则假(0)。

功能和构建信息支持金宝app

请注意

令牌的例子在这一节中,看到的修改模板rtwmakecfg Makefile

| > START_EXPAND_INCLUDES < |
| > EXPAND_DIR_NAME < |
| > END_EXPAND_INCLUDES < |

文件夹名称列表添加到包含路径。此外,ADD_INCLUDES必须添加到宏包括线。

| > START_EXPAND_LIBRARIES < |
| > EXPAND_LIBRARY_NAME < |
| > END_EXPAND_LIBRARIES < |

库名称的列表。

| > START_EXPAND_MODULES < |
| > EXPAND_MODULE_NAME < |
| > END_EXPAND_MODULES < |

内库模块名称| > START_EXPAND_LIBRARIES < || > START_PRECOMP_LIBRARIES < |库列表。

| > START_EXPAND_RULES < |
| > EXPAND_DIR_NAME < |
| > END_EXPAND_RULES < |

Makefile规则。

| > START_PRECOMP_LIBRARIES < |
| > EXPAND_LIBRARY_NAME < |
| > END_PRECOMP_LIBRARIES < |

预编译库名称的列表。

模型参考支持金宝app

请注意

令牌的例子在这一节中,看到的在TMF提供模型参考支持金宝app

| > MASTER_ANCHOR_DIR < |

针对并行构建,目前的工作文件夹(松材线虫病)构建开始。

| > MODELLIB < |

库文件的名称为当前生成模型。

| > MODELREFS < |

列表的模型引用的模型。

| > MODELREF_LINK_LIBS < |

的列表引用模型库的模型链接。

| > MODELREF_LINK_RSPFILE_NAME < |

顶级模特的响应文件名称链接。这个令牌是有效的只有支持链接器响应文件的构建环境。金宝app其使用的一个示例,请参阅matlabrootgrt / rtw / c / /grt_vc.tmf

| > MODELREF_TARGET_TYPE < |

类型的目标。可能的值是

  • 没有一个:独立的模型或模型引用其他模型

  • 环球套票:模型参考目标构建

  • SIM卡:模型参考仿真目标构建

| > RELATIVE_PATH_TO_ANCHOR < |

相对路径,从生成makefile的位置,MATLAB工作文件夹。

| > START_DIR < |

目前的工作文件夹(松材线虫病)构建开始。这个令牌需要并行构建。

| > START_MDLREFINC_EXPAND_INCLUDES < |
| > MODELREF_INC_PATH < |
| > END_MDLREFINC_EXPAND_INCLUDES < |

引用的列表,包括模型的路径模型。

| > SHARED_BIN_DIR < |

文件夹共享的库文件建立源文件。

| > SHARED_LIB < |

从共享源文件,库文件建立包括库文件夹的路径。

| > SHARED_SRC < |

共享源文件规范,包括共享工具文件夹的路径。

| > SHARED_SRC_DIR < |

源文件文件夹共享。

这些令牌被替换的参数值扩展构建过程。例如,如果源模型包含块有两个不同的样本,TMF语句

NUMST = | > NUMST < |

扩大到下面模型楼上

NUMST = 2

除了上面的,make_rtw扩展标记从其他来源:

  • 有针对性的令牌中定义的目标选项配置参数对话框

  • 结构rtwoptions部分系统的目标文件。结构rtwoptions结构数组包含字段makevariable是扩大。

下面的例子是提取matlabrootgrt / rtw / c / /grt.tlc。开始的部分BEGIN_RTW_OPTIONS包含MATLAB代码设置rtwoptions。下面的指令引起的| > EXT_MODE < |扩展到令牌1(对)或0(关闭),这取决于你如何设置外部模式选项。

rtwoptions (2)。makevariable='EXT_MODE'

调用make实用工具

使命令

在创建模型楼上从你TMF,构建过程调用使命令。调用使这个命令,构建过程问题。

makecommand- f模型楼上

makecommand定义的是MAKECMD在你的目标的TMF宏结构模板的Makefile)。您可以指定附加选项使使命令场的代码生成窗格。(见章节指定一个使命令模板makefile和做出选择。)

例如,指定OPT_OPTS = - 02使命令场的原因make_rtw生成以下使命令。

makecommand- f模型楼上OPT_OPTS = - 02

评论的顶部TMF指定可用使命令选项。如果这些选项不为您提供足够的灵活性,您可以配置自己的TMF。

使实用程序版本

使实用程序允许您控制的几乎每一个方面构建实时程序。有几个不同版本的使可用。代码生成器提供了自由软件基金会的GNU®使对于UNIX®(1]在特定于平台的子文件夹和PC平台

matlabroot/ bin

可以使用其他版本的使代码生成器,尽管GNU做出建议。兼容的代码生成器,验证您的版本的使金宝app支持下面的命令格式。

makecommand- f模型楼上

结构模板的Makefile

TMF有多个部分,包括以下:

  • 文摘——描述了makefile的目标。这是一个代表锐信tmf的抽象matlabrootgrt / rtw / c /(开放):

    #文件:grt_lcc。tmf # #文摘:#模板makefile构建一个基于pc的独立的通用实时仿真软件模型的使用#版本编译器生成C代码和LCC # 2.4版本。金宝app# #这个makefile试图符合指南# IEEE Std 1003.2中指定-1992 (POSIX)标准。它是设计用于与GNU #让(gmake)位于matlabroot / bin / win32。# #注意,这个模板是由构建#程序自动定制创建“<模型>。可“# #以下定义可以用来修改的行为#构建:# OPT_OPTS -优化选项。默认是没有的。启用#调试指定OPT_OPTS = g4。#选择-用户特定的编译选项。# USER_SRCS -额外的用户来源,比如# S-functions所需的文件。 # USER_INCLUDES - Additional include paths # (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2") # (For Lcc, have a '/'as file seperator before the # file name instead of a '\' . # i.e., d:\work\proj1/myfile.c - reqd for 'gmake') # # This template makefile is designed to be used with a system target # file that contains 'rtwgensettings.BuildDirSuffix'. See grt.tlc.
  • 宏阅读make_rtw部分,定义了宏,告诉make_rtw如何处理TMF。这是一个代表宏阅读make_rtw锐信tmf的部分matlabrootgrt / rtw / c /(开放):

    # - - -宏阅读make_rtw - - - # #阅读以下宏的构建过程:# # MAKECMD——调用的命令让#效用#主机-平台(例如,PC) #这TMF写#壳-操作系统SHELL命令# #(例如,cmd)平台建设——国旗表明是否# # SYS_TARGET_FILE -调用使从构建过程系统目标文件的名字。MAKECMD = " % MATLAB % \ bin \ win32 \ gmake”主机= PC SHELL = cmd构建grt =是的SYS_TARGET_FILE =。tlc BUILD_SUCCESS = * * *创建COMPILER_TOOL_CHAIN = lcc MAKEFILE_FILESEP = /

    本节中的宏可能包括:

    • MAKECMD——指定使用的命令来调用实用程序。例如,如果MAKECMD=mymake,那么使命令调用

      mymake - f模型楼上

    • 主机——指定该TMF平台的目标。这可以个人电脑,UNIX,computer_name(见MATLAB电脑命令),或任何

    • 壳牌——指定一个操作系统shell命令的平台。对于Windows,这可以cmd

    • 构建——指示make_rtw是否应该调用使从构建过程。指定是的没有

    • SYS_TARGET_FILE——指定系统目标文件的名称或值任何。这是用于一致性检查make_rtw验证系统中指定的目标文件目标选择面板的代码生成面板的配置参数对话框。如果您指定任何与任何系统,您可以使用TMF目标文件。

    • BUILD_SUCCESS-可选宏观,指明构建成功消息显示使在电脑上完成。例如,

      BUILD_SUCCESS = # # #成功的创建

      BUILD_SUCCESS宏,如果使用,取代了标准的构建中成功消息绑定代码生成器的tmf分布式目标(GRT等):

      @echo # # #创建可执行文件(模型). exe

      你的TMF必须包括标准构建成功消息,或使用BUILD_SUCCESS宏。对使用的一个例子BUILD_SUCCESS,请参阅matlabrootgrt / rtw / c / /grt_lcc.tmf或者上面的代码示例宏列表。

    • BUILD_ERROR-可选宏观,指明构建错误消息显示过程中遇到错误时使过程。例如,

      BUILD_ERROR =[错误而构建,modelName]

    • VERBOSE_BUILD_OFF_TREATMENT = PRINT_OUTPUT_ALWAYS——可选宏观包括如果你想makefile输出显示不管的设置详细的构建选项代码生成>调试窗格。

    • COMPILER_TOOL_CHAIN——基于Windows®系统,指定编译器设置文件——位于matlabroot/工具箱/ rtw /环球套票(开放)- - -使用方法:

      对于基于UNIX系统,指定unix。其他值标记为未知make_rtw使用setup_for_default.m

      请注意

      不要省略COMPILER_TOOL_CHAIN或者把它TMF不明。如果编译器,编译器不是主机指定COMPILER_TOOL_CHAIN =违约

    • 下载——一个可选的宏,您可以指定是或否。如果指定为是的(和构建= yes),然后使第二次调用下载目标。

      让- f模型楼上下载

    • DOWNLOAD_SUCCESS——一个可选的宏,您可以使用它来指定下载成功消息当寻找完成下载使用。例如,

      DOWNLOAD_SUCCESS = # # #下载
    • DOWNLOAD_ERROR——一个可选的宏,您可以使用它来指定下载错误信息显示在下载时遇到错误。例如,

      DOWNLOAD_ERROR =[当下载时发生错误,modelName]

  • 令牌扩大了make_rtw部分—定义的令牌make_rtw扩张。这里是一个简短的摘录令牌扩大了make_rtw锐信tmf的部分matlabrootgrt / rtw / c /(开放):

    # - - - - - - - - - - - - - - - - - - - - - - -令牌扩大了make_rtw - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # #以下标记,当用“| >”和“< |”扩大了#构建过程。# # MODEL_NAME -仿真软件框图的名字# MO金宝appDEL_MODULES任何额外的生成源模块# MAKEFILE_NAME - makefile的名字从模板创建makefile <模型>。可# MATLAB_ROOT - MATLAB在哪里安装路径……模型= | > MODEL_NAME < = | |模块> MODEL_MODULES < | MAKEFILE = | > MAKEFILE_NAME < | MATLAB_ROOT = | > MATLAB_ROOT < |…

    关于TMF令牌的更多信息,请参阅模板Makefile make_rtw标记扩展

  • 后续部分随编译器、主机和目标。一些常见的部分包括模型和参考模型,外部模式,工具规格工具的定义,包括路径,C标志,附加的库,源文件

  • 规则部分—包含制定规则用于构建一个可执行文件从生成的源代码。构建规则通常是特定于您的版本的。的规则部分可能是紧随其后的是相关的部分等依赖关系

自定义和创建模板makefile

介绍

本节描述的机制建立一个自定义模板makefile (TMF)并把它融入到构建过程。它还讨论修改TMF的技术和MATLAB文件与TMF相关机制。

创建一个自定义TMF之前,你应该阅读文件夹和文件命名约定理解自定义的文件夹结构和MATLAB路径要求目标。

设置一个模板Makefile

定制或者创建一个新的TMF,你应该复制现有的生物或ERT TMF的以下位置:

matlabrootgrt / rtw / c / (开放)matlabroot/ rtw / c / ert (开放)

把复制在同一个文件夹相关的系统目标文件(31)。通常,这是mytarget / mytarget文件夹内的目标文件夹结构。然后,重命名你的TMF(例如,mytarget.tmf)和修改它。

允许定位和选择TMF构建过程,您必须提供算法中的信息文件头(见系统目标文件结构)。实现单个目标TMF,指定TMF的标准方法用于构建过程是使用TMF指令算法的文件头。

TMF: mytarget.tmf

使用宏和模式匹配表达式模板Makefile

本节所示,通过一个例子,如何使用宏和file-pattern-matching表达式在TMF生成的命令模型楼上文件。

使实用程序处理模型楼上makefile和生成一组命令基于依赖规则中定义模型楼上。后使为建立或重建生成的命令集测试,使执行它们。

例如,建立一个程序调用测试,使必须在目标文件链接。然而,如果目标文件不存在或者过时了,使必须编译源代码。因此有一个源和目标文件之间的依赖关系。

每个版本的使稍微不同的特性和规则是如何定义的。例如,考虑一个项目测试创建两个来源,file1.cfile2.c。使用最多的版本使,依赖规则

测试:file1。o file2.occ-o test file1.o file2.o file1.o: file1.c cc -c file1.c file2.o: file2.c cc -c file2.c

在这个例子中,UNIX(2]环境。在PC环境下的文件扩展名和编译和链接命令是不同的。

在处理第一个规则

测试:file1。o file2.o

使看到建测试,它需要建立file1.ofile2.o。构建file1.o,使流程规则

file1.o: file1.c

如果file1.o不存在,或者如果file1.ofile1.c,使编译file1.c

tmf的格式遵循上面的例子。我们的tmf使用的附加功能使如宏和file-pattern-matching表达式。在大多数版本的使,一个宏定义

MACRO_NAME =价值

对宏是由引用$ (MACRO_NAME)。当使看到这种形式的表达,它的替代品价值$ (MACRO_NAME)

您可以使用模式匹配表达式的依赖更一般的规则。例如,使用GNU(3],你可以更换两个“file1.o: file1.c”和“file2.o: file2.c“规则与规则

%。o: %。ccc-c $<

请注意,$ <在前面的例子是一个特定的宏,它相当于依赖文件(即,file1.cfile2.c)。因此,使用宏和“%“模式匹配字符,可以减少到前面的例子

src = file1。c file2。cobj=$(SRCS:.c=.o) test: $(OBJS) cc -o $@ $(OBJS) %.o : %.c cc -c $<

请注意,$ @宏观上是另一个特定的宏,它相当于当前依赖目标的名称,在这种情况下测试

这个示例生成的列表对象(obj)从源列表中(src)通过使用文本替换为宏扩展功能。它取代源文件扩展名(例如,。c与对象文件扩展名()。o)。这个例子也通用程序的建立规则,测试使用特殊的“$ @“宏。

与rtwmakecfg定制生成makefile

tmf提供令牌,让你添加以下条目生成makefile:

  • 源文件夹

  • 包括文件夹

  • 运行时库的名字

  • 运行时模块对象

S-functions可以将这些信息添加到使用一个makefilertwmakecfg.m文件的功能。这个函数是特别有用的在构建一个模型,其中包含一个或多个功能模块,如设备驱动程序块。

将有关的信息添加到makefile的s函数,

  1. 创建函数rtwmakecfg在文件rtwmakecfg.m。代码生成器将这个文件与你的s函数基于文件夹的位置。

  2. 修改你的目标的TMF这样它支持宏扩展为返回的信息金宝apprtwmakecfg功能。

构建过程的TLC阶段后,从TMF生成makefile,搜索一个构建过程rtwmakecfg.m文件的文件夹,其中包含的功能组件。如果找到该文件,构建过程调用rtwmakecfg函数。有关更多信息,请参见使用rtwmakecfg。m API来定制生成的makefile

金宝app支持自定义的连续时间的目标

如果你想定制ERT-based目标支持连续时间,你必须更新模板makefile (TMF金宝app)和静态主程序模块(例如,mytarget_main.c)你的目标。

模板修改Makefile。添加NCSTATES令牌后扩张NUMST令牌扩张,如下:

NUMST = | > NUMST < | NCSTATES = | > NCSTATES < |

此外,添加NCSTATESCPP_REQ_DEFINES宏,如以下示例:

CPP_REQ_DEFINES = -DMODEL = $(模型)-DNUMST = (NUMST) -DNCSTATES =美元(NCSTATES) \ -DMAT_FILE = (MAT_FILE) -DINTEGER_CODE =美元(INTEGER_CODE) \ -DONESTEPFCN = (ONESTEPFCN) -DTERMFCN = (TERMFCN)美元\ -DHAVESTDIO -DMULTI_INSTANCE_CODE = $ (MULTI_INSTANCE_CODE) \

修改主程序模块。主程序模块定义了一个静态的主要功能管理任务调度的支持任务的单一模式,变产量模型。金宝appNUMST(模型中样本的数量乘以)确定主函数调用多频或单频代码。然而,当一个模型使用连续时间,不要依赖NUMST直接。

当模型的连续时间和旗帜TID01EQ是真的,连续时间和离散时间被当作一个最快速度生成的代码。代码与离散速度最快的守卫的一个主要时间步检查。当模型只有两个利率,和TID01EQ是真的,生成的代码有一个单频调用接口。

支持连金宝app续时间模型,更新静态主模块TID01EQ考虑,如下所示:

  1. 之前NUMST引用文件中,添加以下代码:

    #如果定义(TID01EQ) & & TID01EQ = = 1 & & NCSTATES = = 0 # define DISC_NUMST其他(NUMST - 1) # # define DISC_NUMST NUMST # endif
  2. 取代的实例NUMST在文件DISC_NUMST

模型参考注意事项

看到金宝app支持模型引用有关TMF的重要信息修改您可能需要支持代码生成器模型引用特性。金宝app

请注意

如果您使用的是TMF不变量SHARED_SRCMODELREFS,文件可能已经使用仿真软件的早期版本的软件。金宝app如果你想让你的TMF引用来支持模型,添加变量金宝appSHARED_SRCMODELREFS使文件。

相关的话题


(1]UNIX是一个注册商标的开放组织在美国和其他国家。

(2]UNIX是一个注册商标的开放组织在美国和其他国家。

(3]自由软件基金会的GNU是一个注册商标。

这个主题有帮助吗?