Чтобы сконфигурировать или настроить make-файл шаблона (TMF), необходимо быть знакомы с тем, как команда make
работает и как это обрабатывает make-файл (файл .mk
). Необходимо также понять правила сборки make-файла. Для получения информации об этих темах обратитесь к документации, обеспеченной сделать утилитой, которую вы используете.
Make-файл шаблона содержит лексемы. Процесс сборки расширяет лексемы и создает make-файлы:
– Компиляции и код ссылок сгенерированы от компонентов модели.model.mk
rtwshared.mk
– Компиляции сгенерировали совместно использованный служебный код.
Make-файлы (
) команды использования, которые характерны для вашего компьютера разработчика.model_or_sharedutils.mk
Команда make_rtw
(или различная команда, которой предоставляют некоторые цели), направляют процесс генерации
. Команда model_or_sharedutils.mk
make_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.tlc
BEGIN_RTW_OPTIONS
содержит код MATLAB, который настраивает rtwoptions
. Следующая директива заставляет лексему |>EXT_MODE<|
быть расширенной до 1
(на) или 0
(прочь), в зависимости от того, как вы устанавливаете опции режима external mode.
rtwoptions(2).makevariable = 'EXT_MODE'
После создания
от вашего TMF процесс сборки вызывает команду model_or_sharedutils.mk
make
. Чтобы вызвать make
, процесс сборки дает эту команду.
makecommand -f model_or_sharedutils.mk
задан макросом makecommand
MAKECMD
в 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_name
computer
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 = ### Downloaded
DOWNLOAD_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-файла шаблона (TMF) и слияния его в процесс сборки. Это также обсуждает методы для изменения TMF и механизмов файла MATLAB, сопоставленных с TMF.
Прежде, чем создать пользовательский TMF, необходимо считать Соглашения о присвоении имен Папки и Файла понять структуру папок и требования пути MATLAB для пользовательских целей.
Чтобы настроить или создать новый TMF, необходимо скопировать существующий GRT или ERT TMF от одного из следующих местоположений:
Поместите копию в ту же папку как связанный системный конечный файл (STF). Обычно, это - папка mytarget/mytarget
в целевой структуре папок. Затем переименуйте свой TMF (например, mytarget.tmf
) и измените его.
Чтобы позволить процессу сборки определять местоположение и выбирать ваш TMF, необходимо предоставить информацию в заголовке файла STF (см. Системную Структуру Конечного файла). Для цели, которая реализует один TMF, стандартный способ задать TMF, который будет использоваться в процессе сборки, состоит в том, чтобы использовать директиву TMF заголовка файла STF.
TMF: mytarget.tmf
Этот раздел показывает через пример, как использовать макросы и выражения сопоставления с образцом файла в TMF, чтобы сгенерировать команды в
.model_or_sharedutils.mk
Сделать служебные процессы
и генерируют набор команд, основанных на правилах зависимости, заданных в model_or_sharedutils.mk
. После того, как model_or_sharedutils.mk
make
генерирует набор команд для создания или восстановления 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.o
make
видит, что, чтобы создать 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
, чтобы использовать специальный макрос "$@
".
TMFs обеспечивают лексемы, которые позволяют вам добавить следующие элементы в сгенерированные 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-файл.
[1] UNIX является зарегистрированной торговой маркой Open Group в Соединенных Штатах и других странах.
[2] UNIX является зарегистрированной торговой маркой Open Group в Соединенных Штатах и других странах.
[3] GNU является зарегистрированной торговой маркой Фонда свободного программного обеспечения.