Чтобы сконфигурировать или настроить make-файл шаблона (TMF), необходимо быть знакомы с тем, как команда make работает и как это обрабатывает make-файл (файл .mk). Необходимо также понять правила сборки make-файла. Для получения информации об этих темах обратитесь к документации, обеспеченной сделать утилитой, которую вы используете.
Make-файл шаблона содержит лексемы. Процесс сборки расширяет лексемы и создает make-файлы:
– Компиляции и код ссылок сгенерированы от компонентов модели.model.mk
rtwshared.mk – Компиляции сгенерировали совместно использованный служебный код.
Make-файлы () команды использования, которые характерны для вашего компьютера разработчика.model_or_sharedutils.mk
Команда make_rtw (или различная команда, которой предоставляют некоторые цели), направляют процесс генерации . Команда model_or_sharedutils.mkmake_rtw обрабатывает TMF, заданный на панели Code Generation диалогового окна Configuration Parameters. make_rtw копирует TMF, линию за линией, расширяя каждую лексему, с которой сталкиваются. Обработайте по шаблону Лексемы Make-файла, Расширенные списками make_rtw лексемы и их расширения.
Эти лексемы используются несколькими способами расширенным make-файлом:
Управлять условным поведением в make-файле. Условные выражения используются, чтобы управлять списками исходных файлов, именами библиотеки, цель, которая будет создана, и другая связанная со сборкой информация.
Обеспечить макроопределения для компиляции файлов, например, -DINTEGER_CODE=1.
Обработайте по шаблону Лексемы Make-файла, Расширенные make_rtw
| Лексема | Расширение | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Общая цель | |||||||||||
| Компоновщик отмечает автоматически добавленный блоками. | ||||||||||
| Чередуйте полный путь для исполняемого файла MATLAB®; значение отличается, чем значение для лексемы | ||||||||||
| Чередуйте полный путь для установки MATLAB; значение отличается, чем значение для лексемы | ||||||||||
| Опции передали | ||||||||||
| True (1), когда Single output/update function выбран, в противном случае Ложный (0). Используемый для макроопределения | ||||||||||
| Тип компьютера. Смотрите команду | ||||||||||
| Местоположение предварительно скомпилированного файла библиотеки. Параметр конфигурации | ||||||||||
| Имя библиотеки. Для примеров смотрите Местоположение Библиотеки Управления и Называющий Во время Сборки (Simulink Coder) и Измените Make-файл Шаблона для rtwmakecfg (Simulink Coder). | ||||||||||
| Суффикс библиотеки. Параметр конфигурации | ||||||||||
| True (1), чтобы включить генерацию режима external mode поддерживает код, в противном случае Ложный (0). | ||||||||||
| Индекс транспортного механизма (например, | ||||||||||
| True (1), если выделение статического ЗУ выбрано для режима external mode. Ложь (0), если динамическое выделение памяти выбрано. | ||||||||||
| Размер буфера выделения статического ЗУ (если таковые имеются) для режима external mode. | ||||||||||
| True (1), когда Create SIL block выбран, в противном случае Ложный (0). Используемый для управления цели make-файла сборки. | ||||||||||
| True (1), когда Terminate function required выбран, в противном случае Ложный (0). Используемый для макроопределения | ||||||||||
| True (1), когда Support floating-point numbers не выбран, не в противном случае Ложный (0). | ||||||||||
|
| ||||||||||
| True (1), когда MAT-file logging выбран, в противном случае Ложный (0). MAT_FILE является необходимым макроопределением при компиляции исходного кода и также используется, чтобы включать код журналирования в процесс сборки. | ||||||||||
| Местоположение исполняемого файла MATLAB. | ||||||||||
| Путь туда, где MATLAB установлен. | ||||||||||
| Или | ||||||||||
| Расширение файла MEX. Смотрите команду | ||||||||||
| Дополнительные сгенерированные исходные модули. Например, можно разделить большую модель в два файла, | ||||||||||
| Объектные имена файлов ( | ||||||||||
| Имя блок-схемы Simulink®, в настоящее время создаваемой. | ||||||||||
| True (1), если режим решателя является многозадачностью, в противном случае Ложной (0). | ||||||||||
| Количество непрерывных состояний. | ||||||||||
| Количество шагов расчета в модели. | ||||||||||
| Версия выпуска MATLAB. | ||||||||||
| Список библиотек S-функции, доступных для соединения. | ||||||||||
| Исходное имя файла решателя, например, | ||||||||||
| Объект Solver ( | ||||||||||
|
| ||||||||||
| Задает параметры командной строки компилятора. Строкой в make-файле является
| ||||||||||
| True (1) при выборке уровней непрерывной задачи и первой дискретной задачи равна, в противном случае Ложная (0). | ||||||||||
S-функция и информационная поддержка сборки ПримечаниеДля примеров лексем в этом разделе смотрите, Изменяют Make-файл Шаблона для rtwmakecfg (Simulink Coder). | |||||||||||
| Список имен папок, чтобы добавить к включать пути. Кроме того, макрос ADD_INCLUDES должен быть добавлен к строке INCLUDES. | ||||||||||
| Список имен библиотеки. | ||||||||||
| Имена модуля библиотеки в рамках списков библиотек |>START_EXPAND_LIBRARIES<| и |>START_PRECOMP_LIBRARIES<|. | ||||||||||
| Правила make-файла. | ||||||||||
| Список предварительно скомпилированных имен библиотеки. | ||||||||||
Поддержка модели - ссылки ПримечаниеДля примеров лексем в этом разделе см., что Модель Оказания Ссылается на Поддержку в TMF. | |||||||||||
| Для параллельных сборок, текущая папка работы (pwd) в то время запущенная сборка. | ||||||||||
| Имя файла библиотеки сгенерировано для текущей модели. | ||||||||||
| На список моделей ссылается топ-модель. | ||||||||||
| Список образцовых библиотек, на которые ссылаются, против которых соединяется топ-модель. | ||||||||||
| Имя файла ответа, против которого соединяется топ-модель. Эта лексема допустима только для сред сборки, которые поддерживают файлы ответа компоновщика. Для примера его использования смотрите . | ||||||||||
| Тип цели создается. Возможные значения
| ||||||||||
| Относительный путь, от местоположения сгенерированного make-файла, к MATLAB рабочая папка. | ||||||||||
| Текущая папка работы (pwd) в то время запущенная сборка. Эта лексема требуется для параллельных сборок. | ||||||||||
Эти лексемы расширены заменой значений параметров, известных процессу сборки. Например, если исходная модель содержит блоки с двумя различными шагами расчета, оператором TMF
NUMST = |>NUMST<|
расширяется до:
NUMST = 2
В дополнение к вышеупомянутому make_rtw расширяет лексемы из других источников:
Целевые лексемы заданы в целевых опциях диалогового окна Configuration Parameters
Структуры в разделе rtwoptions системного конечного файла. Расширены структуры в массиве структур rtwoptions, которые содержат поле makevariable.
Следующий пример извлечен от . Раздел начиная с matlabroot/rtw/c/grt/grt.tlcBEGIN_RTW_OPTIONS содержит код MATLAB, который настраивает rtwoptions. Следующая директива заставляет лексему |>EXT_MODE<| быть расширенной до 1 (на) или 0 (прочь), в зависимости от того, как вы устанавливаете опции режима external mode.
rtwoptions(2).makevariable = 'EXT_MODE'
После создания от вашего TMF процесс сборки вызывает команду model_or_sharedutils.mkmake. Чтобы вызвать make, процесс сборки дает эту команду.
makecommand -f model_or_sharedutils.mk
задан макросом makecommandMAKECMD в TMF вашей цели (см. Структуру Make-файла Шаблона). Можно задать дополнительные опции к make в Сделать поле команды панели Code Generation. (См., что разделы Задают Сделать Команду (Simulink Coder) и Make-файлы Шаблона и Делают Опции (Simulink Coder).)
Например, определение OPT_OPTS=-O2 в Сделать поле команды заставляет make_rtw генерировать следующую команду make.
makecommand -f model_or_sharedutils.mk OPT_OPTS=-O2
Комментарий наверху TMF задает доступные опции команды make. Если эти опции не предоставляют вам достаточно гибкости, можно сконфигурировать собственный TMF.
Сделать утилита позволяет вам управлять почти каждым аспектом создания вашей программы в реальном времени. Существует несколько различных версий доступного make. Генератор кода обеспечивает Free Software Foundation GNU®
make и для UNIX®[1] и для платформ PC в специфичных для платформы подпапках под
matlabroot/bin
Возможно использовать другие версии make с генератором кода, несмотря на то, что GNU Делает, рекомендуется. Чтобы быть совместимыми с генератором кода, проверьте, что ваша версия make поддерживает следующий формат команды.
makecommand -f model_or_sharedutils.mk
TMF имеет несколько разделов, включая следующее:
Abstract — Описывает то, для чего предназначается make-файл. Вот является представительный краткий обзор от GRT TMFs в (открытом) :matlabroot/rtw/c/grt
# File : grt_lcc64.tmf
#
# Abstract:
# Template makefile for building a PC-based stand-alone generic real-time
# version of Simulink model using generated C code and LCC compiler
# Version 2.4
#
# This makefile attempts to conform to the guidelines specified in the
# IEEE Std 1003.2-1992 (POSIX) standard. It is designed to be used
# with GNU Make (gmake) which is located in matlabroot/bin/win64.
#
# Note that this template is automatically customized by the build
# procedure to create "<model>.mk"
#
# The following defines can be used to modify the behavior of the
# build:
# OPT_OPTS - Optimization options. Default is none. To enable
# debugging specify as OPT_OPTS=-g4.
# OPTS - User specific compile options.
# USER_SRCS - Additional user sources, such as files needed by
# S-functions.
# USER_INCLUDES - Additional include paths
# (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2")
# (For Lcc, have a '/'as file separator before the
# file name instead of a '\' .
# i.e., d:\work\proj1/myfile.c - required for 'gmake')
#
# This template makefile is designed to be used with a system target
# file that contains 'rtwgensettings.BuildDirSuffix' see grt.tlc
Раздел Macros read by make_rtw — Задает макросы, которые говорят make_rtw, как обработать TMF. Вот является представительный раздел Macros read by make_rtw от GRT TMFs в (открытом) :matlabroot/rtw/c/grt
#------------------------ Macros read by make_rtw ------------------------------
#
# The following macros are read by the build procedure:
#
# MAKECMD - This is the command used to invoke the make utility
# HOST - What platform this template makefile is targeted for
# (i.e. PC or UNIX)
# BUILD - Invoke make from the build procedure (yes/no)?
# SYS_TARGET_FILE - Name of system target file.
MAKECMD = "%MATLAB%\bin\win64\gmake"
SHELL = cmd
HOST = PC
BUILD = yes
SYS_TARGET_FILE = grt.tlc
BUILD_SUCCESS = *** Created
# Opt in to simplified format by specifying compatible Toolchain
TOOLCHAIN_NAME = "LCC-win64 v2.4.1 | gmake (64-bit Windows)"
MAKEFILE_FILESEP = /Макросы в этом разделе могут включать:
MAKECMD — Указывает, что команда раньше вызывала сделать утилиту. Например, если MAKECMD = mymake, то вызванная команда make
mymake -f model_or_sharedutils.mk
HOST — Задает платформу, предназначенную этим TMF. Это может быть PC, UNIX, (см. команду computer_namecomputer MATLAB), или ANY.
SHELL — Задает команду интерпретатора операционной системы для платформы. Для Windows это может быть cmd.
BUILD — Сообщает make_rtw, должен ли он вызвать make из процедуры сборки. Задайте yes или no.
SYS_TARGET_FILE — Задает имя системного конечного файла или значения any. Это используется для непротиворечивости, проверяющей make_rtw, чтобы проверить системный конечный файл, заданный в панели Target selection панели Code Generation диалогового окна Configuration Parameters. Если вы задаете any, можно использовать TMF с любым системным конечным файлом.
BUILD_SUCCESS — Дополнительный макрос, который задает сообщение успеха сборки, которое будет отображено для завершения make на PC. Например,
BUILD_SUCCESS = ### Successful creation of
Макрос BUILD_SUCCESS, если используется, заменяет стандартное сообщение успеха сборки, найденное в TMFs, распределенном со связанными целями генератора кода (такими как GRT):
@echo ### Created executable $(MODEL).exeВаш TMF должен включать или стандартное сообщение успеха сборки или использовать макрос BUILD_SUCCESS. Для примера использования BUILD_SUCCESS смотрите или пример кода выше этого списка макросов.matlabroot/rtw/c/grt/grt_lcc.tmf
BUILD_ERROR — Дополнительный макрос, который задает сообщение об ошибке сборки, которое будет отображено, когда с ошибкой сталкиваются во время процедуры make. Например,
BUILD_ERROR = ['Error while building ', modelName]
VERBOSE_BUILD_OFF_TREATMENT = PRINT_OUTPUT_ALWAYS — Дополнительный макрос, чтобы включать, если вы хотите, чтобы make-файл вывод был отображен независимо от установки Многословной опции сборки в Code Generation> панель Debug.
DOWNLOAD — Дополнительный макрос, который можно задать как да или нет. Если задано как да (и BUILD=yes), то make вызывается во второй раз с целью загрузки.
make -f model_or_sharedutils.mk download
DOWNLOAD_SUCCESS — Дополнительный макрос, который можно использовать, чтобы задать сообщение успеха загрузки, которое будет использоваться при поиске завершенной загрузки. Например,
DOWNLOAD_SUCCESS = ### DownloadedDOWNLOAD_ERROR — Дополнительный макрос, который можно использовать, чтобы задать сообщение об ошибке загрузки, которое будет отображено, когда с ошибкой сталкиваются во время загрузки. Например,
DOWNLOAD_ERROR = ['Error while downloading ', modelName]
Раздел Tokens expanded by make_rtw — Задает лексемы, которые расширяет make_rtw. Вот является краткая выборка от представительного раздела Tokens expanded by make_rtw от GRT TMFs в (открытом) :matlabroot/rtw/c/grt
#---------------------- Tokens expanded by make_rtw ----------------------------
#
# The following tokens, when wrapped with "|>" and "<|" are expanded by the
# build procedure.
#
# MODEL_NAME - Name of the Simulink block diagram
# MODEL_MODULES - Any additional generated source modules
# MAKEFILE_NAME - Name of makefile created from template makefile <model>.mk
# MATLAB_ROOT - Path to where MATLAB is installed.
...
MODEL = |>MODEL_NAME<|
MODULES = |>MODEL_MODULES<|
MAKEFILE = |>MAKEFILE_NAME<|
MATLAB_ROOT = |>MATLAB_ROOT<|
...Для получения дополнительной информации о лексемах TMF, смотрите Лексемы Make-файла Шаблона, Расширенные make_rtw.
Последующие разделы отличаются на основе компилятора, хоста и цели. Некоторые общие разделы включают Model and reference models, External mode, Tool Specifications или Tool Definitions, Include Path, C Flags, Additional Libraries и Source Files.
Раздел Rules — Содержит сделать правила, использованные в создании исполняемого файла из сгенерированного исходного кода. Правила сборки обычно характерны для вашей версии, делают. Раздел Rules может сопровождаться связанными разделами, такими как Dependencies.
Настройте и создайте make-файлы шаблонаВведениеВ этом разделе описываются механику подготовки пользовательского make-файла шаблона (TMF) и слияния его в процесс сборки. Это также обсуждает методы для изменения TMF и механизмов файла MATLAB, сопоставленных с TMF.
Прежде, чем создать пользовательский TMF, необходимо считать Соглашения о присвоении имен Папки и Файла понять структуру папок и требования пути MATLAB для пользовательских целей.
Подготовка make-файла шаблонаЧтобы настроить или создать новый TMF, необходимо скопировать существующий GRT или ERT TMF от одного из следующих местоположений:
Поместите копию в ту же папку как связанный системный конечный файл (STF). Обычно, это - папка mytarget/mytarget в целевой структуре папок. Затем переименуйте свой TMF (например, mytarget.tmf) и измените его.
Чтобы позволить процессу сборки определять местоположение и выбирать ваш TMF, необходимо предоставить информацию в заголовке файла STF (см. Системную Структуру Конечного файла). Для цели, которая реализует один TMF, стандартный способ задать TMF, который будет использоваться в процессе сборки, состоит в том, чтобы использовать директиву TMF заголовка файла STF.
TMF: mytarget.tmfИспользуя выражения макросов и сопоставления с образцом в make-файле шаблонаЭтот раздел показывает через пример, как использовать макросы и выражения сопоставления с образцом файла в TMF, чтобы сгенерировать команды в .model_or_sharedutils.mk
Сделать служебные процессы и генерируют набор команд, основанных на правилах зависимости, заданных в model_or_sharedutils.mk. После того, как model_or_sharedutils.mkmake генерирует набор команд для создания или восстановления test, make выполняет их.
Например, чтобы создать программу под названием test, make должен соединить объектные файлы. Однако, если объектные файлы не существуют или устарели, make должен скомпилировать исходный код. Таким образом между исходными и объектными файлами существует зависимость.
Каждая версия make отличается немного по своим функциям и как заданы правила. Например, рассмотрите программу под названием test, который создается из двух источников, file1.c и file2.c. Используя большинство версий make, правила зависимости были бы
test: file1.o file2.o
cc -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 расширения файла и компиляция и команды ссылки отличаются.
В обработке первого правила
test: file1.o file2.omake видит, что, чтобы создать test, он должен создать file1.o и file2.o. Чтобы создать file1.o, make обрабатывает правило
file1.o: file1.cЕсли file1.o не существует, или если file1.o является более старым, чем file1.c, make компилирует file1.c.
Формат TMFs следует вышеупомянутому примеру. Наши TMFs используют дополнительные функции make, такие как выражения сопоставления с образцом файла и макросы. В большинстве версий make макрос задан с
MACRO_NAME = valueСсылки на макросы сделаны с $(MACRO_NAME). Когда make видит эту форму выражения, он заменяет value $(MACRO_NAME).
Можно использовать выражения сопоставления с образцом, чтобы сделать правила зависимости более общими. Например, использование GNU[3] Делает, вы могли заменить два правила “file1.o: file1.c” и “file2.o: file2.c” на одно правило
%.o : %.c
cc -c $<Обратите внимание на то, что $< в предыдущем примере является специальным макросом, который приравнивается к файлу зависимости (то есть, file1.c или file2.c). Таким образом, с помощью макросов и символа сопоставления с образцом "%", предыдущий пример может уменьшаться до
SRCS = file1.c file2.c
OBJS = $(SRCS:.c=.o)
test: $(OBJS)
cc -o $@ $(OBJS)
%.o : %.c
cc -c $<Обратите внимание на то, что макрос $@ выше является другим специальным макросом, который приравнивается к имени текущей цели зависимости в этом случае test.
Этот пример генерирует список объектов (OBJS) из списка источников (SRCS) при помощи текстовой функции замены макрорасширения. Это заменяет расширение исходного файла (например, .c) с расширением объектного файла (.o). Этот пример также обобщил правило сборки для программы, test, чтобы использовать специальный макрос "$@".
Настройка Сгенерированных Make-файлов с rtwmakecfgTMFs обеспечивают лексемы, которые позволяют вам добавить следующие элементы в сгенерированные make-файлы:
Исходные папки
Включайте папки
Имена библиотеки времени выполнения
Объекты модуля этапа выполнения
S-функции могут добавить эту информацию в make-файл при помощи функции файла rtwmakecfg.m. Эта функция особенно полезна при создавании модели, которая содержит один или несколько Блоков s-function, такой как блоки драйвера устройства.
Добавить информацию, имеющую отношение к S-функции к make-файлу,
Создайте функциональный rtwmakecfg в файле rtwmakecfg.m. Генератор кода сопоставляет этот файл с вашей S-функцией на основе ее местоположения папки.
Измените TMF своей цели, таким образом, что он поддерживает макрорасширение для получения информации, возвращенной функциями rtwmakecfg.
После фазы TLC процесса сборки, при генерации make-файла от TMF, процесс сборки ищет файл rtwmakecfg.m в папке, которая содержит компонент S-функции. Если это находит файл, процесс сборки вызывает функцию rtwmakecfg. Для получения дополнительной информации смотрите Использование rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы (Simulink Coder).
Поддержка непрерывного времени в пользовательских целяхЕсли вы хотите, чтобы ваша пользовательская основанная на ERT цель поддержала непрерывное время, необходимо обновить make-файл шаблона (TMF) и статический основной программный модуль (например, mytarget_main.c) для цели.
Обработайте Модификации Make-файла по шаблону. Добавьте расширение лексемы NCSTATES после расширения лексемы NUMST, можно следующим образом:
NUMST = |>NUMST<|
NCSTATES = |>NCSTATES<|Кроме того, добавьте NCSTATES в макрос CPP_REQ_DEFINES, как в следующем примере:
CPP_REQ_DEFINES = -DMODEL=$(MODEL) -DNUMST=$(NUMST) -DNCSTATES=$(NCSTATES) \
-DMAT_FILE=$(MAT_FILE)
-DINTEGER_CODE=$(INTEGER_CODE) \
-DONESTEPFCN=$(ONESTEPFCN) -DTERMFCN=$(TERMFCN) \
-DHAVESTDIO
-DMULTI_INSTANCE_CODE=$(MULTI_INSTANCE_CODE) \Модификации к Основному Программному модулю. Основной программный модуль задает статическую основную функцию, которая справляется с планированием задач для поддерживаемых режимов управления задачами сингла - и модели нескольких-уровней. NUMST (количество шагов расчета в модели) определяет ли основные вызовы функции многоскоростной или односкоростной код. Однако, когда модель использует непрерывное время, не полагайтесь на NUMST непосредственно.
Когда модель имеет непрерывное время, и флаг TID01EQ является истинным, и непрерывным временем и самым быстрым дискретным временем, обработаны как один уровень в сгенерированном коде. Код, сопоставленный с самым быстрым дискретным уровнем, охраняет основная проверка временного шага. Когда модель имеет только два уровня, и TID01EQ верен, сгенерированный код имеет односкоростной интерфейс вызова.
К моделям поддержки, которые имеют непрерывное время, обновите статический основной модуль, чтобы принять во внимание TID01EQ, можно следующим образом:
Прежде чем на NUMST ссылаются в файле, добавьте следующий код:
#if defined(TID01EQ) && TID01EQ == 1 && NCSTATES == 0
#define DISC_NUMST (NUMST - 1)
#else
#define DISC_NUMST NUMST
#endifЗамените экземпляры NUMST в файле DISC_NUMST.
Факторы модели - ссылкиСмотрите, что Модель поддержки Ссылается для важной информации о модификациях TMF, которые вы, возможно, должны сделать, чтобы поддерживать модель генератора кода ссылка на функции.
Примечание
Если вы используете TMF без переменной MODELREFS, файл может использоваться с предыдущим релизом программного обеспечения Simulink. Если вы хотите свой TMF к ссылке модели поддержки, добавьте MODELREFS в make-файл.
Похожие темы
- О разработке целевого процессора (Simulink Coder)
- Демонстрационные пользовательские цели (Simulink Coder)
- Настройте системные конечные файлы (Simulink Coder)
- Пользовательские целевые дополнительные функции (Simulink Coder)
- Поддержите подход набора инструментальных средств с пользовательской целью (Simulink Coder)
[1] UNIX является зарегистрированной торговой маркой Open Group в Соединенных Штатах и других странах.
[2] UNIX является зарегистрированной торговой маркой Open Group в Соединенных Штатах и других странах.
[3] GNU является зарегистрированной торговой маркой Фонда свободного программного обеспечения.