При указании системного целевого файла для создания кода генератор кода может создать автономную исполняемую программу, которая может выполняться на компьютере разработчика. Для построения исполняемой программы генератор кода использует выбранный компилятор и make-файл, созданный с помощью метода процесса построения toolchain или template makefile (TMF). Частью процесса создания makefile является добавление информации об исходном файле, файле заголовка и файле библиотеки (зависимостей) в созданный makefile для компиляции. Кроме того, для конкретного приложения можно добавить сгенерированные файлы и зависимости файлов с помощью системы управления конфигурацией.
Созданный код для модели состоит из небольшого набора файлов. (См. раздел Управление файлами процесса построения.) Эти файлы имеют зависимости от других файлов, которые возникают из-за:
Включения заголовочных файлов
Объявления макросов
Вызовы функций
Объявления переменных
Модель или внешний код вводит зависимости по различным причинам:
Блоки в модели генерируют код, который вызывает функцию. Эти вызовы могут выполняться в нескольких формах:
Включенные исходные файлы (не сгенерированные) объявляют вызываемые функции. В таких случаях, как блоксеть, управляйте этими зависимостями исходных файлов, компилируя их в файл библиотеки.
Созданный код вызывает функции в библиотеке времени выполнения, предоставляемой компилятором.
Некоторые зависимости функций также являются сгенерированными файлами, которые называются общими утилитами. В качестве примеров можно привести утилиты с фиксированной точкой и функции поддержки, не являющиеся конечными. Эти зависимости называются общими утилитами. Созданные функции могут отображаться в файлах в папке сборки для автономных моделей или в папке _sharedutils в папке под slprj для построений, содержащих ссылку на модель.
Модели с непрерывным временем требуют файлов исходного кода решателя.
Параметры генератора кода, такие как внешний режим, C API и ведение журнала файлов MAT.
Внешний код указывает зависимости.
Генератор кода предоставляет несколько механизмов для ввода информации о зависимости файла в процесс построения. Механизмы зависят от того, основаны ли зависимости на блоках, на моделях или на системных целевых файлах.
Для блоковых зависимостей рекомендуется использовать:
S-функции и блоки
Добавьте папки, содержащие MEX-файлы S-функции, которые используются моделью в путь к заголовку, включая путь.
Создайте правила makefile для этих папок, чтобы разрешить поиск исходного кода.
Укажите дополнительные имена исходных файлов с помощью параметра блока S-Function SFunctionModules.
Укажите дополнительные зависимости с помощью rtwmakecfg.m механизм. См. раздел Использование API rtwmakecfg.m для настройки созданных Makefiles.
Дополнительные сведения о применении этих подходов к интеграции устаревшего или внешнего кода см. в разделе Импорт вызовов внешнего кода в сгенерированный код с помощью инструмента устаревшего кода.
Блок S-Function Builder, предоставляющий собственный пользовательский интерфейс для указания информации о зависимостях
Для целевых файловых зависимостей модели или системы, таких как внешние заголовочные файлы, рекомендуется использовать:
Панель «Создание кода» > «Пользовательский код» в диалоговом окне «Параметры конфигурации». Можно указать дополнительные библиотеки, исходные файлы и папки.
Функции TLC LibAddToCommonIncludes() и LibAddToModelSources(). Во время фазы TLC можно указать зависимости. См. разделы LibAddToCommonIncludes (incFileName) и LibAddSourceFileCustomSection (файл, builtInSection, newSection). Продукт Embedded Coder ® также предоставляет шаблон настройки на основе TLC для создания дополнительных исходных файлов.
Для процессов построения подхода к цепочке инструментов или шаблона makefile (TMF) генератор кода генерирует makefile. Для TMF созданный makefile обеспечивает расширение маркеров, в котором процесс построения расширяет различные маркеры в makefile, чтобы включить дополнительную информацию о зависимостях. Результирующий make-файл содержит полную информацию о зависимостях. См. раздел Настройка Makefiles шаблонов.
Созданный make-файл содержит:
Имена зависимостей исходных файлов
Папки, в которых находятся исходные файлы
Расположение файлов заголовков
Предкомпилированные зависимости библиотеки
Библиотеки, которые make утилита компилирует и создает
Свойство make это то, что вам не нужно указывать конкретное расположение для данного исходного файла C или C++. Если для этой папки существует правило, а имя исходного файла является обязательным условием в make-файле, утилита make может найти исходный файл и скомпилировать его. Компилятор C или C++ (препроцессор) не требует абсолютных путей к заголовкам. Компилятор находит файл заголовка с именем файла заголовка с помощью #include директива и путь включения. Сгенерированный исходный код C или C++ зависит от данной стандартной возможности компилятора.
Библиотеки создаются и связываются с, но закрывают определенные функции, вызываемые программой.
Эти свойства могут затруднить определение минимального списка зависимостей файлов вручную. Файл make можно использовать в качестве начальной точки для определения зависимостей в созданном коде.
Другой подход к определению зависимостей заключается в использовании информации компоновщика, такой как файл карты компоновщика, для определения зависимостей символов. Файл карты содержит информацию о местоположении генератора кода и исходных и заголовочных файлов блоксета, что помогает в поиске зависимостей.
Несколько расположений в дереве папок MATLAB ® содержат статические зависимости файлов, специфичные для генератора кода:
(открыто) matlabroot/rtw/c/src
Эта папка имеет вложенные папки и содержит дополнительные файлы, которые необходимо скомпилировать. Примеры включают функции решателя (для непрерывной поддержки времени), файлы поддержки внешнего режима, файлы поддержки C API и файлы поддержки S-функций. Включить исходные файлы в этой папке в процесс построения с помощью SRC переменные make-файла.
Заголовочные файлы в папке matlabroot/rtw/extern/include
Заголовочные файлы в папке matlabroot/simulink/include
Эти папки содержат дополнительные зависимости заголовочных файлов, такие как tmwtypes.h, simstruc_types.h, и simstruc.h.
Примечание
Для целевых системных файлов на основе ERT можно избежать нескольких зависимостей заголовков. Системные целевые файлы на основе ERT генерируют в файле минимальный набор определений типов, макросов и т.д. rtwtypes.h.
Продукты Blockset с S-функциональным кодом применяют rtwmakecfg.m механизм обеспечения генератора кода информацией о зависимостях. rtwmakecfg.m файл из блоксети содержит список зависимостей пути включения и исходного пути для блоксети. Как правило, блоки создают библиотеку из исходных файлов, с которыми может быть связан созданный код модели. Библиотеки создаются и идентифицируются при использовании rtwmakecfg.m механизм.
Чтобы найти rtwmakecfg.m файлы для блоков в установленном дереве MATLAB, используйте следующую команду:
>> which -all rtwmakecfg.m
Если в компилируемой модели используется один или несколько блоков, перечисленных в which , можно определить информацию о зависимости папки и файла из соответствующего rtwmakecfg.m файл.
Можно добавить #include операторов к сгенерированному коду. Такие ссылки могут поступать из нескольких источников, включая сценарии TLC для встраивания S-функций, пользовательские классы хранения, объекты шины и объекты типа данных. Включенные файлы состоят из заголовочных файлов для внешнего кода или других настроек. Можно указать пути включения компилятора с помощью -I параметр компилятора. Процесс построения использует указанные пути для поиска включенных файлов заголовков.
Сценарии использования для сгенерированного кода включают, помимо прочего, следующее:
Пользовательский процесс построения компилирует созданный код, для которого требуется определенный для среды набор #include заявления.
В этом сценарии процесс построения вызывает генератор кода при выборе параметра конфигурации модели Только генерировать код. Рассмотрите возможность использования полных путей, относительных путей или только имен заголовочных файлов в #include заявления. Используйте пути включения.
Процесс построения компилирует созданный код.
В этом случае можно указать пути включения компилятора (-I) для процесса построения несколькими способами:
Укажите дополнительные пути включения на панели «Создание кода» > «Пользовательский код» в диалоговом окне «Параметры конфигурации». Генератор кода распространяет пути включения в созданный файл make.
rtwmakecfg.m механизм позволяет S-функциям вводить дополнительные пути включения в процесс построения. Генератор кода распространяет пути включения в созданный файл make.
При построении модели, использующей пользовательский целевой файл системы и основанную на makefile, можно непосредственно добавить пути включения в файл makefile шаблона, используемый целевым файлом системы.
Используйте make для указания USER_INCLUDES make variable, определяющая папку, в которой процесс построения выполняет поиск включенных файлов. Например:
make_rtw USER_INCLUDES=-Id:\work\feature1
Процесс построения передает пользовательские компоненты в командную строку утилиты make, которая добавляет их к общим флагам, передаваемым компилятору.
#include Инструкции и пути включенияРассмотрим следующие подходы к использованию #include операторы и включают пути с процессом сборки для создания кода, который остается портативным и сводит к минимуму проблемы совместимости с будущими версиями.
Предположим, что дополнительные заголовочные файлы:
c:\work\feature1\foo.h c:\work\feature2\bar.h
Подход должен включать в #include указывает только имя файла, например:
#include "foo.h" #include "bar.h"
Затем путь включения, передаваемый компилятору, содержит папки, в которых существуют файлы заголовков:
cc -Ic:\work\feature1 -Ic:\work\feature2 ...
Другой подход заключается в использовании относительных путей в #include операторы и предоставляют папку привязки для этих относительных путей, используя путь включения, например:
#include "feature1\foo.h" #include "feature2\bar.h"
Затем укажите папку привязки (например, \work) компилятору:
cc -Ic:\work ...
При использовании процесса построения избегайте зависимостей от папок в папке создания кода процесса построения, например папки или model_ert_rtwslprj папка. Не использовать пути в #include инструкции, относящиеся к расположению созданного исходного файла. Например, если папка создания кода MATLAB c:\work, процесс построения генерирует исходный файл во вложенную папку, например:model.c
c:\work\model_ert_rtw\model.c
файл имеет model.c#include выписки формы:
#include "..\feature1\foo.h" #include "..\feature2\bar.h"
Предпочтительно использовать один из других предложенных подходов, поскольку относительный путь создает зависимость от структуры папки генератора кода.