Процесс сборки позволяет вам предоставить необязательный пользовательский код в методах hook, которые выполняются в заданных точках генерации кода и выполняют процесс. Можно использовать методы hook для добавления специфичных для целевого объекта действий к процессу сборки.
Можно изменять методы зацепления в файле, обычно называемом
, где STF
_make_rtw_hook.m
- имя системного целевого файла, например STF
ert
или mytarget
. Этот файл реализует функцию,
, который отправляет на определенное действие, в зависимости от STF
_make_rtw_hookhookMethod
передан аргумент.
Процесс сборки вызывает
, проходя в STF
_make_rtw_hookhookMethod
аргумент и другие аргументы. Вы реализуете только те методы зацепления, которые требуются вашему процессу сборки.
Если ваша модель содержит образцы модели, можно реализовать
для каждого образца модели по мере необходимости. Процесс сборки вызывает каждый STF
_make_rtw_hook.m
для образцов модели обработка этих файлов рекурсивно (в порядке зависимостей).STF
_make_rtw_hook
Для вызова процесса сборки в
, проверить выполнение следующих условий:STF
_make_rtw_hook
The
файл находится в MATLAB® путь.STF
_make_rtw_hook.m
Имя файла является именем вашего системного целевого файла (STF
), добавленный к тексту _make_rtw_hook.m
. Для примера, если вы генерируете код с пользовательским системным целевым файлом mytarget.tlc
, назовите файл hook mytarget_make_rtw_hook.m
, и назовите функцию hook, реализованную в файле mytarget_make_rtw_hook
.
Функция hook, реализованная в файле, использует прототип функции, описанный в STF_make_rtw_hook.m Function Prototype и аргументы.
Прототип функции для
является:STF
_make_rtw_hook
function STF_make_rtw_hook(hookMethod, modelName, rtwRoot, templateMakefile, buildOpts, buildArgs, buildInfo)
Аргументы определяются как:
hookMethod
: Вектор символов, задающий этап процесса сборки, с которого
вызывается функция. Следующий график потока операций результирует процесс сборки, подсвечивая точки зацепления. Допустимые значения для STF
_make_rtw_hookhookMethod
являются 'entry'
, 'before_tlc'
, 'after_tlc'
, 'before_make'
, 'after_make'
, 'exit'
, и 'error'
. The
функция отправляет соответствующий код со STF
_make_rtw_hookswitch
оператор.
modelName
: Вектор символов, задающий имя модели. Действительно на всех этапах процесса сборки.
rtwRoot
Зарезервировано.
templateMakefile
: Имя файла make-файла шаблона.
buildOpts
: Структура MATLAB, содержащая логическое поле codeWasUpToDate
. Действителен для 'before_make'
, 'after_make'
, и 'exit'
только этапы. The buildOpts
поля включают:
buildArgs
: Вектор символов, содержащий аргумент в make_rtw
. Когда вы вызываете процесс сборки, buildArgs
копируется из следующего аргумента "make_rtw"
в поле Configuration Parameters + Code Generation + Make command.
Например, следующие делают аргументы из поля команды Make
make_rtw VAR1=0 VAR2=4
сгенерировать следующее:
% make -f untitled.mk VAR1=0 VAR2=4
The buildArgs
аргумент не применяется к сборкам подхода набора инструментальных средств, поскольку эти сборки не позволяют добавлять аргументы деления к make_rtw
вызов. В командной строке компилятора для предоставления пользовательских определений (для примера, VAR1=0 VAR2=4
), которые применяются как к TMF-подходу, так и к сборкам подхода набора инструментальных средств, используйте поле Configuration Parameters Code Generation > Custom Code > Defines >.
buildInfo
: Структура MATLAB, содержащая информационные поля сборки модели. Действителен для 'after_tlc'
, 'before_make'
, 'after_make'
, и 'exit'
только этапы. Для получения информации об этих полях и функциях для доступа к ним смотрите Build Process Индивидуальной настройки.
Вот несколько примеров применения
методы крючков.STF
_make_rtw_hook.m
В целом можно использовать 'entry'
hook для инициализации процесса сборки, например, для изменения или проверки настроек перед генерацией кода. Одно приложение для 'entry'
hook - перезапуск скрипта автоматической настройки, который первоначально выполнялся в целевое время выбора, для сравнения параметров модели до и после выполнения скрипта в целях валидации.
Другие точки зацепления, 'before_tlc'
, 'after_tlc'
, 'before_make'
, 'after_make'
, 'exit'
, и 'error'
применяются для взаимодействия с внешними цепями инструментов, инструментами системы контроля версий и другими инструментами окружения.
Например, можно использовать
файл на этапе после STF
_make_rtw_hook.m'entry'
для получения пути к папке сборки. На 'exit'
затем можно найти сгенерированный код файлы в папке сборки и проверить их в системе контроля версий. Можно использовать 'error'
для очистки статических или глобальных данных, используемых функцией hook, когда ошибка возникает во время генерации кода или процесса сборки.
Примечание
Процесс сборки временно меняет рабочую папку MATLAB на папку сборки для этапов 'before_make'
, 'after_make'
, 'exit'
, и 'error'
. Ваши
файл не должен делать неправильные допущения относительно расположения папки сборки. В точке после STF
_make_rtw_hook.m'entry'
stage, можно получить путь к папке сборки. В следующем примере кода MATLAB, путь к папке сборки возвращается как вектор символов к переменной buildDirPath
.
buildDirPath = rtwprivate('get_makertwsettings',gcs,'BuildDirectory');
Примечание
Изменение строения модели в
файл (включая варианты переключения) может привести к неожиданным результатам в генерации кода.STF
_make_rtw_hook.m
Когда вы перестраиваете модель, по умолчанию процесс сборки выполняет проверки, чтобы определить, требуют ли изменения модели или релевантных настроек регенерации верхней части модели. (Для получения дополнительной информации о критериях см. «Регенерация управления верхней частью модели».) Если проверки определяют, что требуется генерация кода верхней модели, процесс сборки полностью регенерирует и компилирует код модели. Если проверки указывают, что сгенерированный верхней моделью код является текущим относительно модели, и настройки модели не требуют полной регенерации, процесс сборки опускает регенерацию верхней части модели.
Независимо от того, регенерируется ли код верхней модели, процесс сборки впоследствии вызывает крючки процесса сборки, включая
функций и команды генерации кода посткода. Следующие механизмы позволяют вам выполнить действия, связанные с регенерацией кода в STF
_make_rtw_hook
функции:STF
_make_rtw_hook
Для принудительной регенерации кода используйте следующий вызов функции из 'entry'
крюк:
rtw.targetNeedsCodeGen('set', true);
В крюках от 'before_tlc'
через 'exit'
, а buildOpts
структура, переданная в крюк, имеет логическое поле codeWasUpToDate
. Для поля задано значение true
если код модели был актуален, и код не был регенерирован, или false
если код не был актуален, и код был перегенерирован. Можно настроить действия зацепления на основе значения этого поля. Для примера:
... case 'before_tlc' if buildOpts.codeWasUpToDate %Perform hook actions for up to date model else %Perform hook actions for full code generation end ...
Создание пользовательского
файл hook для вашей процедуры сборки, скопируйте и отредактируйте пример STF
_make_rtw_hookert_make_rtw_hook.m
файл, который находится в папке
(откройте) следующим образом:matlabroot
/ toolbox/coder/embeddedcoder
Копировать ert_make_rtw_hook.m
в папку в пути MATLAB. Переименуйте его в соответствии с соглашениями об именовании, описанными в Соглашениях об использовании файла STF_make_rtw_hook. Для примера использовать его с целью GRT grt.tlc
, переименуйте его в grt_make_rtw_hook.m
.
Переименуйте ert_make_rtw_hook
функция в файле, совпадающая с именем файла.
Реализуйте крючки, которые вам нужны, добавив код к операторам случая в switch hookMethod
оператор.
after_tlc
The after_tlc
метод крюка доступен исключительно для обратной совместимости.
Формат сгенерированного кода во время after_tlc
этап не является окончательным форматом.